手寫快排 遞迴實現 棧迭代實現

2021-10-06 09:34:16 字數 1152 閱讀 5352

快排思想:選取乙個記錄作為樞軸,經過一趟排序,將整段序列分為兩個部分,其中一部分的值都小於樞軸,另一部分都大於樞軸。然後繼續對這兩部分繼續進行排序,從而使整個序列達到有序。

實現:演算法:

1.選取乙個中樞key,

2.將陣列,小於key的放左邊,大於key的放右邊

3.最後將key放到這個分成2組的中間

4.那麼這個key的順序位置就確定了,接下來繼續對除了key的左右兩組分別繼續這樣排序。

#include

#include

using

namespace std;

//先排乙個key,分兩組

intpartsort

(int

* a,

int l,

int r)

//出來時候說明l=r;;;;

//注意1.當第一條whiel(l)l出來的時候 l=r了,第二條while語句不執行了,所以swap就是交換本身而已

swap

(key, a[l]);

//交換中樞與l處;;;//2。第一條whiule裡l出來說明a[l]>key,在右邊,所以和右邊交換沒毛病

return l;

}//遞迴實現

void

quiksort

(int

* a,

int l,

int r)

//迭代棧實現

void

quicksort2

(int

* a,

int l,

int r)

if(index +

1< r)}}

intmain()

;//quiksort(array, 0, sizeof(array) / sizeof(array[0]) - 1);

quicksort2

(array,0,

sizeof

(array)

/sizeof

(array[0]

)-1)

;for

(auto c : array)

std::cout <<

"hello world!\n"

;}

參考鏈結

快排的迭代,遞迴實現及其優化

首先快排是一種比較排序。具體思想是 選出乙個基準值,通過比較找出待排序區間中基準值該放置的位置。實現邏輯 通常有三種方式來進行基準數的左右分區。左右指標法。挖坑法前後指標法。左右指標實現 左右指標法 intpartsort int a,int begin,int end while begin en...

快排非遞迴實現

int partition int arr,int low,int high arr low pivot return low void non recursive qsort int arr,int low,int high if high pivot 1 其實就是用棧儲存每乙個待排序子串的首尾元...

快速排序(快排 遞迴實現)

時間複雜度 o nlogn 注意 1 時間複雜度與pivot的選取有關,最好能選到正中間 2 該排序不是穩定排序 1.0 不用swap函式 相較2.0節省時間 int qsort int l,int r s l pivot return l 2.0 用swap函式int qsort int l,in...