快速排序演算法QuickSort(二)

2022-03-06 17:07:06 字數 2429 閱讀 5548

這個快速排序演算法是對前面的 快速排序演算法quicksort  一種改進。

只是修改了int partition(int arry,int start,int end)這個方法。

仔細觀察我們可以發現,我們前面partition方法中,都需要swap(arry,start,end),

但是這一步中有些步驟是可以省略的。

在(因為當前的arry[start]是值就是pivot ;

在(start->)過程中,碰到第乙個大於等於pivot的元素之,只需要進行一次賦值arry[end]=arry[start]; 

因為當前的arry[end]的值就是pivot的值。

整個過程中,不是start就是end指向pivot所儲存的單元 ,所以在整個過程中,pivot沒有必要每次通過swap來儲存,只需要在最後找到pivotkey的時候,

令arry[pivotkey]=pivot即可。

具體修改如下**例項。

view code

#include

#include

#include

using

namespace std;

#define maxnum 100

/*改進的int partition(int arry,int start,int end)

仔細觀察我們可以發現,我們前面partition方法中,都需要swap(arry,start,end),

但是這一步中有些步驟是可以省略的。

在(因為當前的arry[start]是值就是pivot

在(start->)過程中,碰到第乙個大於等於pivot的元素之,只需要進行一次賦值arry[end]=arry[start];

因為當前的arry[end]的值就是pivot的值,

整個過程中,不是start就是end指向pivot所儲存的單元

所以在整個過程中,pivot沒有必要每次通過swap來儲存,只需要在最後找到pivotkey的時候,

令arry[pivotkey]=pivot即可。

*/int partition(int arry,int start,int end)

void qsort(int arry,int start,int end)

}void quicksort(int arry,int len)

void main()

;srand(time(null));

cout<

輸入隨機數組長度n:

"<>n;

cout<

生成長度為

"的100以內的隨機數組

"排序前:

"cout

排序後:

"cout

pause

");}

/*輸入隨機數組長度n:

10生成長度為10的100以內的隨機數組

排序前:

91 67 99 37 40 70 49 71 43 42

排序後:

37 40 42 43 49 67 70 71 91 99

請按任意鍵繼續. . .

*/

今天發現以前一直以為對的快排寫錯了,因此沒有考慮需要排序的數相等的情況,如果排序的陣列中有相同的數,那麼就會出現死迴圈,一直沒有結果,要做的修改就是修改partition函式,修改以後如下:

view code

int partition(int arry,int start,int

end)

arry[start]=pivot;

/*cout<

return

start;

}

做的唯一修改就是將原來的arry[end]>pivot改為arry[end]>=pivot,arry[start]

view code

#include#include

using

namespace

std;

int partition(int arry,int start,int

end)

arry[start]=pivot;

return start;//

此時start=end,所以返回start跟返回end一樣。

}void quicksort(int arry,int start,int

end)

void printarry(int arry,int

len)

intmain()

;

int len=sizeof(arry)/sizeof(int);//

求陣列長度

quicksort(arry,0,len-1);//

快排 printarry(arry,len);//

列印陣列

system("

pause");

return0;

}

快速排序演算法QuickSort

quicksort.cpp 定義控制台應用程式的入口點。快速排序演算法實現 設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用第乙個資料 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。然後,對前面部分比它小的數繼續進行快速排序 ...

演算法 快速排序 quick sort

在前面介紹的排序演算法中,最快的排序演算法為歸併排序,但是歸併排序有乙個缺陷就是排序過程中需要o n 的額外空間。本文介紹的快速排序演算法時一種原地排序演算法,所需的額外空間複雜度為o 1 演算法介紹 快速排序其實一種根據需找某個元素的具體位置進行排序的方法。比如所存在如下陣列 選擇第乙個元素5,找...

演算法 快速排序(Quick Sort)

演算法定義 目前學習是五種排序 冒泡 插入 選擇 合併 快速 中,快速排序是最讓我喜歡的演算法 因為我想不到 其定義如下 演算法舉例 5,4,3,2,1 5,4,3,2,1 4,5,3,2,1 1,5,3,2,4 1,4,3,2,5 1,2,3,4,5 演算法實現 1 using system 2u...