一、存在的問題
- 當數組長度較小時,不比其他排序算法高效,如插入排序;
- 當數組爲有序數組時,或者所選中軸數每次都是最小或最大的元素,造成每次分區都只有一個分區(每次分區後規模都只減1),得到最壞時間複雜度O(n^2)
二、改進
對於快排存在的問題,對應的改進方法如下:
1.當劃分到較小的子數組時,通常可以使用插入排序替代快速排序
此時可以設定一個快排分區的閾值,當待排數組分區後的長度小於閾值時改用插入排序。
2.三數平均分區法(Median of three partitioning)
在三數平均分區法中,並不是選擇待排數組的第一個數作爲中軸數,而是選用待排數組最左邊、最右邊和最中間的三個元素的中間值作爲中軸數,避免出現所選中軸數爲最小或最大的情況。