幾種經典排序算法的比較

對於時間複雜度來講,快速排序的速度比較快。算法

通常系統級別的排序都是使用快速排序。對於有可能出現大量重複元素的狀況,咱們能夠使用三路的快速排序。函數


 

歸併排序必須開闢額外的空間完成歸併的過程,才能完成歸併排序。性能

快速排序雖然是在原地完成的排序,但它仍然須要log2n個額外空間。spa

這是由於咱們在使用遞歸的方式來實現快速排序,須要分紅log2n層,相應地有log2n層棧空間來保存每一次遞歸時的臨時變量,以供遞歸返回時繼續使用。code

一樣地,歸併也是用遞歸來實現的,因此它的額外空間應該是O(n+log2n),只不過n要比log2n大得多,因此就咱們只關注它的額外空間是O(n)級別的。blog


 

排序算法的穩定性 Stable:對於相等的元素,在排序後,原來靠前的元素依然靠前。相等元素的相對位置沒有發生改變排序

一些穩定的算法若是實現很差的話依然可能會實現成不穩定的程序。遞歸

同時咱們還能夠使用自定義比較函數,讓排序算法不存在穩定性的問題。(其實也就是多比較了一下,相應的會有一些性能損耗)table

例如:(在C++中)class

bool operator<(const Student& otherStudent){ return score != otherStudent.score ? score > otherStudent.score : name < otherStudent.name;

在上表中,咱們一般在一個系統級別的排序問題中選擇一個穩定的排序算法時,選擇歸併排序

相關文章
相關標籤/搜索