初级排序
选择排序
不断选择剩余元素的最小者
$O(N^2)$
插入排序
将后续元素插入到已经有序的元素适当的位置
$O(N^2)$
希尔排序
每次对N有序子数组进行 插入排序
,然后减少N,重复对有序子数组进行 插入排序
,直到N为1
对于中等数量级,通常只慢高级排序一点,实现简单,适合嵌入式开发
归并排序
分治策略:先排序左半部分,再排序右半部分,最后合并,合并需要使用额外N控件的中间数组
$O(NlogN)$
快速排序
分治策略:将数组分为三部分,比元素v小的元素,v元素,比v大的元素,可以理解这是一种入座算法,通过不断让元素入座(同时保证左子树都小于右子树),实现整体数组有序。
注意需要事先Shuffle,不然最多需要 $N^2/2$ 比较
优化:熵最优(大量重复元素情况),小数组使用插入排序,三取样(切分数尽量为中位数)
优先队列
适用于流式输入,插入通过上浮,删除通过下沉来实现有序
堆排序,先下沉后上浮