1. 程式人生 > 其它 >加權無向圖最小生成樹-Prim和Kruskal法

加權無向圖最小生成樹-Prim和Kruskal法

          北京時間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;
}