快速排序優化(一)

2021-08-16 01:20:46 字數 1027 閱讀 1491

歸併排序時間複雜度:

快速排序時間複雜度:

快速排序最差時間複雜度:

快速排序的最壞情況基於每次劃分對主元的選擇。基本的快速排序選取第乙個元素作為主元。這樣在

陣列已經有序的情況下,每次劃分將得到最壞的結果。一種比較常見的優化方法是隨機化演算法,即隨機選取乙個元素作為主元。這種情況下雖然最壞情況仍然是o(n^2),但最壞情況不再依賴於輸入資料,而是由於

隨機函式取值不佳。實際上,隨機化快速排序得到理論最壞情況的可能性僅為1/(2^n)。所以隨機化快速排序可以對於絕大多數輸入資料達到o(nlogn)的期望

時間複雜度。一位前輩做出了乙個精闢的總結:「隨機化快速排序可以滿足乙個人一輩子的人品需求。」

隨機化快速排序的唯一缺點在於,一旦輸入資料中有很多的相同資料,隨機化的效果將直接減弱。對於極限情況,即對於n個相同的數排序,隨機化快速排序的時間複雜度將毫無疑問的降低到o(n^2)。解決方法是用一種方法進行掃瞄,使沒有交換的情況下主元保留在原位置。

#includeusing namespace std;

int partition(int arr, int l, int r)

swap(arr[l], arr[j]);

//返回j的位置

return j;

}void quicksort(int arr, int l, int r)

int main() ;

quicksort(arr,0,7);

for (int i = 0; i < 8; i++)

return 0;

}

總結:認真領悟:

快速排序 優化

快速排序是對氣泡排序的一種改進。其基本思想基於分治法 在待排序表中選擇乙個元素當作標準記為mark,通過一次排序將排序表分成兩個部分,前一部分是小於mark的所有元素,後一部分是大於等於mark,mark放在了最終的位置上,這一過程叫做一趟快速排序。然後分別遞迴的對兩個子表進行上述重複過程,直到每個...

快速排序優化

優化點 優化選取中軸元素 以上 target 選取的位置是認定了陣列元素的首位,但是若這個數值的大小不在整個陣列的中間位置,會大大降低快排的效能。target array low 這句就成了乙個潛在的效能瓶頸。因此快速排序的速度還取決於這個target關鍵元素在陣列中的位置。改進方法 三數取中法 去...

排序 快速排序及其優化

在排序中交換數字,達到排序的目的 由於 是c語言寫的,所以需要給出交換函式 如果是c 那麼就直接用交換函式 void swap int left,int right 先標記基準值 這裡先取最後乙個元素為基準值,記錄起來 之後定義兩個指標,然後前後遍歷,找到比基準值大的或者小的的元素的位置,然後進行標...