三種快速排序

2021-10-10 02:42:46 字數 1884 閱讀 3433

/**

* 3種快排的實現方式,1是不適合重複元素多,2可以適應重複元素多,3可以優化重複元素多的時間

*//**

* @author hxj 2023年7月27日

*/public

class

main

int l =

0, r = arr.length -1;

quicksort

(arr, l, r);}

private

static

void

quicksort

(int

arr,

int l,

int r)

//use partion1

// int pivot = partition1(arr, l, r);

// quicksort(arr, l, pivot - 1);

// quicksort(arr, pivot + 1, r);

//use partion2

int[

] bound =

partition2

(arr, l, r)

;quicksort

(arr, l, bound[0]

);quicksort

(arr, bound[1]

, r)

;//use partition3

// int bound = partition3(arr, l, r);

// quicksort(arr, l, bound[0]);

// quicksort(arr, bound[1], r);

}// 之所以要設計成取中點元素,是因為很多oj都喜歡使用如這樣的資料去卡時間

private

static

intpartition1

(int

arr,

int l,

int r)

else

if(arr[i]

== num)

}swap

(arr, center, pivot)

;return pivot;

}private

static

int[

]partition2

(int

arr,

int l,

int r)

while

(arr[j]

> num)

if(i <= j)

}return

newint

;//返回左區間邊界和右區間邊界

}private

static

int[

]partition3

(int

arr,

int l,

int r)

else

if(arr[i]

> num)

else

}return

newint

;}private

static

void

swap

(int

arr,

int i,

int j)

public

static

void

main

(string[

] args)

;quicksort

(arr)

;for

(int i =

0; i < arr.length; i++

) system.out.

println

(arr[i]);

}}

三種快速排序法

交換函式 為了提高效率,當所交換的兩個元素值不相等時,用異或運算 void swap int a,int b else 第一種快排 只有乙個長度n,每次需計算出low和high指標 int quicksort process1 int a,int n a high temp return high ...

三種快速排序以及快速排序的優化

1 快速排序的基本思想 快速排序使用分治的思想,通過一趟排序將待排序列分割成兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小。之後分別對這兩部分記錄繼續進行排序,以達到整個序列有序的目的。2 快速排序的三個步驟 1 選擇基準 在待排序列中,按照某種方式挑出乙個元素,作為 基準 pivot 2...

快速排序的三種實現方式

隨機選取乙個基數 一般是陣列的第乙個 小技巧 可以在陣列中隨機取乙個元素換到首位作為基準元素 進行排序,把小於基數的放到左邊,大於基數的放到右邊 分別對基數的左 右部分重新進行步驟2,直到陣列有序。由上面的步驟可以看出,最重要的是第二步,本文來講解三種方式實現元素分堆。第一種 雙指標 i j 同時從...