所以我們需要對其進行優化。首先產生這種情況的原因是什麼?是基數,當一個已經排好序的數組,我們所選的基數要麼最大,要麼最小,這就使得在排序過程中耗費了大量時間,那麼如何篩選基數?
方法一:隨機數產生區間內的某個數。
方法二:在劃分算法上進行優化。
我們將同時從兩端進行遍歷,將需要的值進行交換即可。
方法三:短區間進行選擇排序。
考慮到選擇算法的最優時間是O(n),也就是對於已經近似排序好的數組,耗費的時間接近於遍歷一次的時間。
方法四:考慮到隨機數耗費的時間比較多,所以更好的做法就是我們人工篩選基數。
將要排序的區間進行分段。
當區間長度小於 7 時,我們採用選擇排序;
當區間長度小於 40 時,我們將區間分成兩段,得到左端點、右端點和中點,我們對這三個點取中數作爲基數;
當區間大於等於 40 時,我們將區間分成 8 段,得到左三點、中三點和右三點,分別再得到左三點中的中數、中三點中的中數和右三點中的中數,再將得到的三個中數取中數,然後將該值作爲基數。
具體代碼只是在上一份的代碼中加個篩選中數函數即可。