/**
* 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 同時從...