温故知新-排序算法笔记

初级排序

选择排序

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

$O(N^2)$数组

插入排序

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

$O(N^2)$code

希尔排序

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

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

归并排序

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

$O(NlogN)$开发

快速排序

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

注意须要事先Shuffle,否则最多须要 $N^2/2$ 比较it

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

优先队列

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

堆排序,先下沉后上浮

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

相关文章
相关标签/搜索