排序的本质是建立元素次序。评价算法不能只看速度,还要看是否稳定、是否原地、输入是否接近有序。冒泡、选择、插入都以两两比较为主,平均为 O(n²);其中插入排序对近乎有序的小数组很友好,冒泡稳定但交换多,选择排序交换少却不稳定。

归并排序把序列递归拆半,再线性合并,时间始终为 O(n log n),稳定但需 O(n) 辅助空间。快速排序选枢轴并分区,使较小元素在左、较大元素在右,再处理两侧;平均 O(n log n)、最坏 O(n²),随机选枢轴和三数取中能降低退化概率。堆排序先建最大堆,反复把堆顶换到末尾并下沉,时间 O(n log n)、额外空间 O(1),但不稳定。

希尔排序按逐渐缩小的步长做分组插入,表现依赖步长;计数排序统计每个值出现次数,适合值域不大的整数;桶排序先按区间分桶再分别排序;基数排序从低位或高位逐轮分配。这三类不是比较排序,条件合适时可接近 O(n+k)

实践选择可概括为:小规模或近有序用插入;需要稳定且内存允许用归并;通用内存排序常用优化快排;要求稳定上界且空间紧张可考虑堆。误区是把“平均最快”当成任何数据都最快,也不要忽略稳定性——同分学生按原时间次序保留,就是稳定排序的价值。

小结:先根据数据规模、值域、稳定性和空间约束筛选,再谈常数性能;算法名称不如分区、合并、建堆和计数这些机制重要。