幾種sort的優劣勢

quicksort有最好的實踐效率。同時是in-place。配上random pivot/shuffle,median-
of-K 和 少量元素轉insertion sort是最實用的排序方法。O(n^2)複雜度是極其小概率
事件,一般不會發生。同時因爲其對硬件cache的應用效率較高,實踐中Quicksort很難
被beat, 因爲cache的訪問速度比內存尋址快兩個數量級。
遞歸不僅僅是存partition point,遞歸的過程中堆棧會存儲所有function call 和相關變量的信息。
不過64bit的堆棧已經大幅簡化了。



Mergesort的優勢是stable以及在external sort中的使用. 理論分析時候的也會用到
worstcase n(log(n))。同時基本的merge想法和變形,不需要random access, 常常用
在很多其他問題的解決之中。比如說merge lists。但是megersort的constant factor
比較大,是quicksort的好幾倍。一般比Quicksort慢。

Heapsort因爲在時間上和空間上都是最優,在很多論文只要涉及到sort都會用它做理論
分析。constant factor還不錯,比merge sort的好。但是它的致命弱點是對cache利用
的不好,比如說max-heapify的過程中,很少有相鄰元素的處理。雖然有這些缺點,有
時小規模排序時還是有用。
Cache就是數據locality的問題。Cache都小,但是快。所以如果程序處理的數據都是連
續的,或者說有很好locality的特性,Cache hit概率就大,運行就快。
並不是涉及到交換的都是不stable,比如說insertion sort就是stable的。關鍵要看交
換的過程是怎麼樣的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章