常用排序的應用場景


一.排序算法分類

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. 穩定性分析

    分析穩定性之前首先要了解什么是穩定性,簡單講吧,要排序的數中有兩個相同的數,用A算法進行排序后,兩個相等數的位置不會互換,則A算法是穩定的,否則A不穩定。沒聽懂??那來個例子吧,現在要排序1,2,2這三個數,我們用A算法排序,如果排序后兩個2的位置不會互換,則A算法是穩定的,如果互換了,則A算法就是不穩定的。好了,下面我們看肯那些是穩定的哪些是不穩定的吧。

穩定排序

    插入排序,冒泡排序,二叉樹排序,歸並排序

不穩定排序

    快速排序(快),希爾排序(些),選擇排序(選),堆排序(一堆)。

    記不住怎么辦,其實只要你了解排序算法的原理,稍加分析就能得出結論,但如果你要死記硬背又怕自己記不住,哥也有辦法,記住:只需記住一句話(快些選一堆美女一起玩兒)是不穩定的,其他都是穩定的,OK輕松搞定。

 

(特別感謝傳a奇的經驗分享)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM