北京時間2022年03月13日,傍晚17:07分。天氣晴朗,多雲,溫度28。今天來實現JAVA快速排序,快速排序的核心思想是某個數的左邊必須小於等於此數,右邊必須大於等於此數。因此,思路為:
(一)、先找出一個基准數,讓其在正確的位置,使得滿足左邊的數小於等於此基准數,右邊的數大於等於此基准數。
(二)、對步驟(一)中的左右兩邊的數重復(一)操作,既遞歸處理。
(三)、重復(一)(二)步驟......
(四)、代碼實現:
public static void main(String[] args){
// int[] array = {91,92,95,89,88,90};
int[] array = {6,4,5,-1,0,100};
print(array,"原始數組");
// sort(array,0,array.length-1);
QuickSort(array,0,array.length-1);
print(array,"結果");
}
public static void QuickSort(int[] array,int left,int right){
if (left>=right){
return;
}
// 先求出基准數的下標
int index = sort(array,left,right);
// 對基准數左邊遞歸
QuickSort(array,left,index);
// 對基准數右邊遞歸
QuickSort(array,index+1,right);
}
/**
* left,左邊界.
* right,右邊界.范圍array.length-1
*/
public static int sort(int[] array,int start,int end){
// 找出一個基准數,使得左邊的數<=基准數,基准數>=右邊的數,返回此基准數下標
// 假設第一個數就是基准數
int s = start;
while (start<end){
// 從右邊開始找到小於等於基准數的
while (start<end && array[end]>array[s]){
end--;
System.out.println("end = "+end);
}
// 從左邊開始找到大於基准數的
while (start<end && array[s]>=array[start]){
start++;
System.out.println("start = "+start);
}
// end>start 說明小於等於基准數還在右邊,大於基准數的在左邊,兩兩交換即可
if (end>start) {
swap(array, start, end);
}
}
swap(array,s,start);
return start;
}