一.排序算法分類
1.插入排序法
直接插入排序,希爾排序(面試最常問)
2.交換排序
冒泡排序,快速排序(面試最常問)
3.選擇排序
直接選擇排序,堆排序(面試最常問)
4.歸並排序
歸並排序
5.基數排序
以上算是最常用的一些算法。
二.空間、時間復雜度、穩定性

三.性能分析
1.O(n^2)性能分析
平均性能為O(n^2)的有:直接插入排序,選擇排序,冒泡排序
在數據規模較小時(9W內),直接插入排序,選擇排序差不多。當數據較大時,冒泡排序算法的時間代價最高。性能為O(n^2)的算法基本上是相鄰元素進行比較,基本上都是穩定的。
2.O(nlogn)性能分析
平均性能為O(nlogn)的有:快速排序,歸並排序,希爾排序,堆排序。其中,快 排是最好的,其次是歸並和希爾,堆排序在數據量很大時效果明顯(堆排序適合處理大數據)。
大數據處理的一個例子:找出一千萬個數中最小的前一百個數。
思路:建立一百個節點的大頂堆,首先將前一百個數放入堆中,之后每放入一個數就刪除一個堆頂元素,最后剩下的就是最小的一百個數。當然也可以分區處理,感興趣的小伙伴可以網上搜一下大神們的帖子。
這四種排序可看作為“先進算法”,其中,快排效率最高(大數據就不行了,而且速度有概率性),但在待排序列基本有序 的情況下,會變成冒泡排序,接近O(n^2).
希爾排序對增量的標准沒有較為滿意的答案,增量對性能會有影響。
歸並排序效率非常不錯,在數據規模較大的情況下,比希爾排序和堆排序要好。
多數先進的算法都是因為跳躍式的比較,降低了比較次數,但犧牲了排序的穩定 性。
3. 穩定性分析
穩定排序
插入排序,冒泡排序,二叉樹排序,歸並排序
不穩定排序
快速排序(快),希爾排序(些),選擇排序(選),堆排序(一堆)。
記不住怎么辦,其實只要你了解排序算法的原理,稍加分析就能得出結論,但如果你要死記硬背又怕自己記不住,哥也有辦法,記住:只需記住一句話(快些選一堆美女一起玩兒)是不穩定的,其他都是穩定的,OK輕松搞定。
(特別感謝傳a奇的經驗分享)