天天看點

快速排序實作

算法思想:快速排序時這樣的一種排序,選取數組中的第一個元素arr[0]作為依據,周遊一遍數組後,使得數組中的第一個元素進入正确的位置,即在該位置左面的元素均小于等于arr[0],在該位置右面的元素均大于等于arr[0]。然後,在對該位置左面和右面的元素分别進行快速排序,如此一來完成整個數組的排序。

算法代碼:

小結:首先還是說明快速排序時不穩定的,但是是原地排序,不需要額外的空間,時間複雜度是O(nlog n),實際上,這種把第一個元素作為依據元素隻是快速排序的一種,STL中的sort内部實作是根據排序到了不同的階段選用不同的排序算法。當資料量大是采用 quick_sort排序,當分段遞歸到了資料量小于某個數值時,為避免quick_sort的遞歸調用帶來的額外開銷,就改用insert_sort 了;如果遞歸層次過深,還會考慮使用heap_sort 。

繼續閱讀