快速排序 優化

2021-08-20 13:20:12 字數 787 閱讀 7045

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

1.小區間擴張法:

首先找到乙個標準(陣列中最後一位),然後設定小區域,即(所有小於標準的元素都排在小區域內)。當遇到元素比標準小時,元素交換,小區域擴大;當遇到元素與標記相等時,不換,元素繼續向下尋找;當元素大於標準時,不換,元素繼續向下尋找。

**:

#includeusing namespace std;

int qsort(int arr,int nlow,int nhigh)

//else時,正常執行快排

3.將陣列分成三部分,前端小於標準值,中部等於標準值,後部大於標準值。(類似與荷蘭國旗問題。)void qsort(int arr,int l,int h)//最後一位時劃分值,用l變數遍歷所有陣列,arr[l]為當前數,l++

{       int p = arr[h];//標準值

int less = l-1;//小區間

int more = h;//大區間

while(l複雜度與穩定性:

快速排序最優時間複雜度時o(nlogn);最差時間複雜度時o(n^2);平均時間複雜度時o(nlogn);空間複雜度最差是o(n);最優空間複雜度是o(logn);是一種不穩定的演算法。

快速排序優化

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

排序 快速排序及其優化

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

快速排序及其優化

include include 呼叫c 自帶sort include include include using namespace std define max 1000000 define k 12 ifdef debug define new new normal block,file lin...