理論上快速排序的平均時間複雜度是nlgn.最差是n^2.
但實際實現中可能表現的不如插入排序等其他演算法。筆者參考stl的實現總結了三個對快速排序優化的要點。
1 標值的選取。stl庫中採用三點中值的方面,增加了合理選取標值的概率。
2 排序序列小於16時候採用插入排序。這個是可以證明的,在小資料量的時候插入排序的效率優於快速排序。
3 快速排序的切割深度。當深度大於16時,採用插入排序。
上述3點是實踐可以證明能帶來優化的,尤其是第三點。理論上應該也是可以證明的。在《演算法導論》中提到了上述三點相關的概念,研讀中……
排序演算法(六)快速排序的優化
優化方法 一 分別取第乙個數字,中間數字,和最後乙個數字進行比較,選擇中間的數字作為基準 三者取中只能優化資料基本有序的情況,包含降序和公升序 static int mid int a,int b,int c if a c if b c return b b則是中間大的數字 三者取中得到基準 sta...
演算法導論 快速排序優化演算法!
常見快速排序 時間複雜度最好情況下o nlgn 最壞情況o n2 快速排序是基於分治模式的 分解 陣列a p.r 被劃分成兩個 可能空 子陣列a p.q 1 和a q 1.r 使得a p.q 1 中的每個元素都小於等於a q 而且,小於等於a q 1.r 中的元素。下 標q 也在返個劃分過程中迕行計...
快速排序演算法和優化
快速排序演算法又稱為劃分交換排序,是對氣泡排序的一種改進,還是採用分治法 左右指標法 先設定乙個關鍵字key作為比較物件 一般取陣列的最前或最後的數 key length 1 設定兩個變數left 0,right length 1 left一直往後走,直到找到乙個大於key的值,left停下 此時r...