為什麼c STL sort 函式在使用快排之後,再呼叫插入排序?

時間 2021-06-03 06:08:24

1樓:

原因不是插入排序的對於小陣列比較快(如其它答案所說的),而是插入排序對於已經接近排好序的陣列比較快。

如題主所說,常見的stl的sort實現中,會先利用快速排序,保證這些無序的partition元素個數小於一定數值,然後直接退出,而不是接著對小陣列呼叫插入排序。插入排序的呼叫地點是在快速排序完全結束之後,對整個陣列再呼叫一次。這時這個陣列已經接近排好序了,所以插入排序的執行效果很好。

如果希望更嚴謹地考察什麼叫「已經接近排好序」,以及為什麼這種情況下插入排序比較快,可以考察這個陣列中距離最遠的逆序對的距離。因為快速排序的性質,最遠的逆序對的距離不會超過退出快速排序時的閾值長度,這是乙個較小的值。而插入排序的時間複雜度為 ,且一般常數很小,所以這時執行的會很快。

2樓:

插入排序 - 維基百科

SO - 為什麼對於小陣列插入排序比快排好Why is Insertion sort better than Quick sort for small list of elements?

為什麼在夢中打人使不上勁?

狗滴嘟 l我們的夢往往是天馬行空的,在夢裡,我們的行為常常不受約束。人類有一套自我保護機制,為了防止我們在現實中作出奇怪,或者危險的事兒,在我們進入睡眠狀態的時候,大腦就關掉了肢體動作的這一功能,暫時進入 癱瘓 的狀態。這時候我們的四肢就是想動而不能動,但我們的大腦並沒有閒著,當我們在夢裡打架,或者...

為什麼冪函式不叫底數函式

令狐帝主 冪函式叫底數函式完全沒問題,而且跟指數函式對應,底數函式 指數函式描述了自變數的位置。而對數函式,可以認為求自變數 真數 之對數的函式。 趙洪生 能找到這裡的人,說明都經歷了思考,我也是一樣的。可以心裡把它叫為底數函式,說出來的時候還是冪函式,自己明白的同時也能跟別人交流。話說另外的問題,...

程式設計的函式和數學的函式為什麼都叫函式?

哲學嘉 本質是一樣的,電腦程式的函式概念基於數學上的函式,只不過加了一些操作在裡面,所以變得跟數學上的函式有點不一樣 計算機中的函式包含輸入 輸出 資料處理還有操作 比如輸出到螢幕 而數學上的函式只關注數。在數學上,輸入 資料處理 輸出,這三者缺少任何乙個都是沒有意義的,而在電腦程式裡,就算你輸入 ...