一、冒泡排序Bubble Sort核心思想两两比较大的往后 “冒”每轮确定一个最大值。解题步骤外层循环控制轮数内层循环比较相邻元素逆序则交换可加 flag 优化某轮无交换直接结束C 模板void bubbleSort(int a[], int n) { for (int i 0; i n; i) { bool flag false; for (int j 0; j n - i - 1; j) { if (a[j] a[j 1]) { swap(a[j], a[j 1]); flag true; } } if (!flag) break; } }复杂度时间最好 O (n)最坏 / 平均 O (n²)空间O (1)稳定常考基础填空、复杂度、稳定性手动模拟排序过程二、选择排序Selection Sort核心思想每轮选最小放到已排序区末尾。解题步骤找未排序区最小值下标和未排序区第一个交换缩小未排序区间C 模板void selectionSort(int a[], int n) { for (int i 0; i n; i) { int minIdx i; for (int j i 1; j n; j) { if (a[j] a[minIdx]) minIdx j; } swap(a[i], a[minIdx]); } }复杂度O (n²) 无论好坏不稳定常考交换次数、与冒泡 / 插入对比三、插入排序Insertion Sort核心思想像打牌一样逐个插入到前面有序区。解题步骤从第 2 个数开始向前比较大的后移找到位置插入C 模板void insertionSort(int a[], int n) { for (int i 1; i n; i) { int x a[i]; int j i - 1; while (j 0 a[j] x) { a[j 1] a[j]; j--; } a[j 1] x; } }复杂度最好 O (n)最坏 O (n²)稳定常考近乎有序数组效率高、快排 / 归并小规模优化四、归并排序Merge Sort⭐⭐⭐⭐⭐蓝桥必考核心思想分治拆分成单元素再合并两个有序数组。解题步骤二分递归拆合并两个有序数组用临时数组存结果C 模板int tmp[100010]; void merge(int a[], int l, int mid, int r) { int i l, j mid 1, k l; while (i mid j r) { if (a[i] a[j]) tmp[k] a[i]; else tmp[k] a[j]; } while (i mid) tmp[k] a[i]; while (j r) tmp[k] a[j]; for (int p l; p r; p) a[p] tmp[p]; } void mergeSort(int a[], int l, int r) { if (l r) return; int mid (l r) / 2; mergeSort(a, l, mid); mergeSort(a, mid 1, r); merge(a, l, mid, r); }复杂度O(n log n)稳定常考超级高频逆序对统计外部排序分治思想题五、快速排序Quick Sort⭐⭐⭐⭐⭐核心思想选基准 pivot小左大右递归两边。解题步骤选基准partition 分区递归左右C 模板void quickSort(int a[], int l, int r) { if (l r) return; int i l, j r; int pivot a[l]; while (i j) { while (i j a[j] pivot) j--; a[i] a[j]; while (i j a[i] pivot) i; a[j] a[i]; } a[i] pivot; quickSort(a, l, i - 1); quickSort(a, i 1, r); }复杂度平均 O (n log n)最坏 O (n²)不稳定常考第 K 大 / 小数partition 过程手写快排六、堆排序Heap Sort⭐⭐⭐⭐核心思想建大顶堆每次取堆顶放末尾再调整堆。解题步骤建堆交换堆顶与末尾调整堆C 模板void down(int a[], int u, int n) { int t u; if (u * 2 n a[u * 2] a[t]) t u * 2; if (u * 2 1 n a[u * 2 1] a[t]) t u * 2 1; if (t ! u) { swap(a[u], a[t]); down(a, t, n); } } void heapSort(int a[], int n) { for (int i n / 2; i 1; i--) down(a, i, n); for (int i n; i 1; i--) { swap(a[1], a[i]); down(a, 1, i - 1); } }复杂度O(n log n)不稳定常考TopK优先队列堆调整次数七、桶排序Bucket Sort核心思想按范围分桶桶内排序再合并。C 模板简易版const int MAX 100010; int bucket[MAX]; void bucketSort(int a[], int n) { memset(bucket, 0, sizeof bucket); for (int i 0; i n; i) bucket[a[i]]; int idx 0; for (int i 0; i MAX; i) { while (bucket[i]--) a[idx] i; } }复杂度O(n k)稳定常考范围集中、频率统计八、基数排序Radix Sort核心思想按个位、十位、百位… 逐位桶排。解题步骤取每一位按位入桶收集常考大数排序、字符串排序、不比较排序九、计数排序本质简化桶排适合范围小整数。模板同桶排。十、近五年蓝桥杯排序真题高频考点2020–2025归并求逆序对几乎每年都有小朋友排队翻转对快排 partition第 K 大数找中位数堆排序 / 优先队列最大 / 最小 K 个数自定义排序数位和排序字符串字典序复杂度与稳定性填空区间排序、贪心 排序活动选择、区间覆盖二分 排序最接近值、第几个数