温故知新-排序算法笔记

初级排序

选择排序

不断选择剩余元素的最小者

$O(N^2)$

插入排序

将后续元素插入到已经有序的元素适当的位置

$O(N^2)$

希尔排序

每次对N有序子数组进行 插入排序 ,然后减少N,重复对有序子数组进行 插入排序,直到N为1

对于中等数量级,通常只慢高级排序一点,实现简单,适合嵌入式开发

归并排序

分治策略:先排序左半部分,再排序右半部分,最后合并,合并需要使用额外N控件的中间数组

$O(NlogN)$

快速排序

分治策略:将数组分为三部分,比元素v小的元素,v元素,比v大的元素,可以理解这是一种入座算法,通过不断让元素入座(同时保证左子树都小于右子树),实现整体数组有序。

注意需要事先Shuffle,不然最多需要 $N^2/2$ 比较

优化:熵最优(大量重复元素情况),小数组使用插入排序,三取样(切分数尽量为中位数)

优先队列

适用于流式输入,插入通过上浮,删除通过下沉来实现有序

堆排序,先下沉后上浮

https://en.wikipedia.org/wiki/Sorting_algorithm

posted @ 2018-09-12 16:14  EnPFighter  阅读(144)  评论(0编辑  收藏  举报