排序之快速排序(quickSort)

2022-09-10 21:21:40 字數 2140 閱讀 9131

比如說乙個陣列

6,1,2,7,9,4,5,10,8
int a=;
快排有三個要素:基準flag、左哨兵i、右哨兵

為了方便一般以陣列的第一位作為flag基準

記住,每次動都是右哨兵j先動,j從8開始探測,尋找比基準6小的數,j--

i從6開始探測尋找比基準6大的數,i++,交換

交換完為止,還是從右哨兵j開始探測,尋找比基準6小的數

左哨兵i++探測比基準大的數,交換

交換完為止,還是從右哨兵j開始探測,尋找比基準6小的數,找到了3

左哨兵i++探測比基準大的數

兩個哨兵相遇了,就不能繼續走了

然後此時將該位置的3和基準交換

這時候,原序列就被分為兩個序列了,左序列為3 1 2 5 4右序列為9 7 10 8

接下來就需要處理這兩個序列,首先都是處理左序列3 1 2 5 4

基準為3 繼續上邊的操作 調整過後2  1  3  5  4

左序列為2 1 調整過後為 1 2 3 5 4 6 9 7 10 8

右序列調整 1 2 3 4 59 7 10 8

接下來處理右序列 9 7 10 8 同樣的方法

**如下

1

public

class

quicksort

27while(start < end && a[end] >=base)

28//

從右邊開始遍歷,如果比基準值大,就繼續向左走

29 end--;

30//

上面的while迴圈結束時,就說明當前的a[end]的值比基準值小,應與基準值進行交換

31if(start

3940

} 41

//這裡返回start或者end皆可,此時的start和end都為基準值所在的位置

42return

end;

43}

4445

/**46

* 排序

47*

@param

a 48

* @param

start

49*

@param

end

50*/

51public

static

void sort(int a, int start, int

end)

56else

6263}

64public

static

void

main(string args) ;

67int c = new

int;

68int d = new

int;

69int a = new

int;

7071 sort(a, 0, a.length-1);

7273 system.out.println("排序後的結果:");

74for(int

x : a)

77}

7879 }

基本排序演算法之3 快速排序quicksort

快排的思路就不說了,中軸分組,借助乙個臨時單元。時間複雜度o nlogn 下面是實現 includeusing namespace std templatebool less t a,t b a first temp qsort a,first,f qsort a last 1,n last 1,f...

第七章快速排序之「快速排序QUICKSORT」

include using namespace std int partition int a,int lo,int hi while a j key if i j else return j void quicksort int a,int lo,int hi int j partition a,...

python實現快速排序 quick sort

快速排序 quick sort 又稱劃分交換排序 partition exchange sort 通過一輪取乙個元素作為中間值,將要排序的資料分割成兩部分,其中一部分的所有資料都比這個中間值都要小,另外一部分的所有資料都比這個中間值要大,然後再次按此方法依次對這兩部分資料分別再次進行快速排序,注意在...