public class MergeArrays {
//需要三個指針,頭尾各一個,以及分割這個數組的一個指針(mid)
//另外需要一個臨時數組長度爲(hight-low+1)
//通過指針比較,將小的存於臨時數組,再將未循環的數依次放進臨時數組中
//將臨時數組複製給參數數組
public static void mergeArrays(int[] arr,int low,int mid,int hight) {
int[] temp=new int[hight-low+1];
int index=0;
int i=low,j=mid+1;
while(i<=mid && j<=hight) {
if (arr[i]<arr[j]) {
temp[index]=arr[i];
i++;
index++;
}
else {
temp[index]=arr[j];
j++;
index++;
}
}
while (i<=mid) {
temp[index]=arr[i];
i++;
index++;
}
while (j<=hight) {
temp[index]=arr[j];
j++;
index++;
}
for (int k = 0; k < temp.length; k++) {
arr[k+low]=temp[k];
}
}
//迭代的排序數組
public static void mergeIteration(int arr[],int low,int hight) {
int mid=(low+hight)/2;
if (low<hight) {
mergeIteration(arr, low, mid);
mergeIteration(arr, mid+1, hight);
mergeArrays(arr,low,mid,hight);
}
}
//數組進入的入口
public static int[] mergeSort(int arr[]) {
int low=0;
int hight=arr.length-1;
mergeIteration(arr, low, hight);
return arr;
}
}
歸併排序(java)筆記
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.