快排的幾種變形

2022-02-14 19:07:30 字數 1477 閱讀 5551

快排的幾種方式與思想可以用到很多地方,直接看**:

view code

1 #include 

2 #include 34

/** author: mike feng

5* 快排,時間複雜度為o(nlgn),幾種方法的實驗,注意細節。

6* 1,兩邊分別訪問,交換;

7* 2,一邊訪問,交換;

8* 3,兩邊分別訪問,替換;

9* 4,隨機生成界限點;

10*/

1112

void print(int *a,int len)

13 19

20/*

將陣列a劃分為兩部分,使用交換完成,此方法沒有使用任何額外的空間存放元素。前面的元素小於a[r-1],後面的元素大於a[r-1]

*/21

int partion(int *a,int p,int r)

22 39 i++;/*

防止相等時死迴圈

*/40

41 }

42if(a[r-1]1])/*

因為分界點為最後元素,所以和大的交換

*/43

4849

return j;/*

返回分界點,演算法下標為1

*/50

51 }

5253

/*直接替換

*/54

int partion_e(int *a,int p,int r)

55 72 a[i-1]=x;

7374

return i;

7576 }

77/*

交換,只從一邊掃瞄

*/78

int partition(int *a,int p,int r)

79 90 }

91if(a[r-1]92

9798 print(a,12);

99100

return (i+1);/*

演算法下標從1開始,所以這裡要加1

*/101 }

102103

int randomized_patition(int *a,int p,int r)

104

114115

int *quicksort(int *a,int p,int r)

116

128return a;

129 }

130131

132int main(void)

133 ;

136 print(a,12);

137//

int a=;

138139 b=quicksort(a,1,12);

140141 print(b,12);

142143

144return

0;145 }

快排的幾種優化方案

先來複習下找基準的方法 public static int partion int arr,int start,int end if start end else while start end arr start tmp if start end else arr start tmp return...

快排2 經典快排和荷蘭國旗快排

基礎知識見 建議先閱讀基礎知識,並自己手推一遍 演算法原理 第一步 取陣列最後乙個數作為num,將陣列中的 num的數放在陣列的左邊,num的數放在陣列的右邊,這是可以理解為分成了兩個陣列 第二步 然後將 num的部分當成乙個陣列,繼續第一步 num的部分同理 第三步 若陣列的大小 2,則結束。流程...

python實現快排演算法 python快排演算法詳解

快排是python經典演算法之一。1 下面講解的是什麼是快排和快排的圖示。2 快排是一種解決排序問題的運算方法。3 快排的原理 在陣列中任意選擇乙個數字作為基準,用陣列的資料和基準資料進行比較,比基準數字打的數字的基準數字的右邊,比基準數字小的數字在基準數字的左邊,第一次排序之後分為比基準資料大或比...