package lbs;
import java.util.Arrays;
//二路归并排序
public class Num8 {
static int[] temp = new int[9];
public static void main(String[] args) {
System.out.println("二路归并排序:");
int[] arr = {2,4,1,3,5,7,9,8,6};
System.out.println(Arrays.toString(arr));
mergeSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void merge(int[] arr, int low, int mid, int high) {
int i=0,j=0,k=0;
for (k = low; k <= high; k++) {
temp[k] = arr[k]; //将所有数组元素复制到临时数组中
}
/*以下for循环是核心内容*/
for (i = low, j = mid+1, k = i; i <= mid&&j <= high; k++) {
if (temp[i] <= temp[j]) {
arr[k] = temp[i++];
} else {
arr[k] = temp[j++];
}
}
while (i <= mid) {
arr[k++] = temp[i++]; //将剩余的部分全部放在末尾
}
while (j <= high) {
arr[k++] = temp[j++]; //将剩余的部分全部放在末尾
}
}
public static void mergeSort (int[] arr, int low, int high) {
if (low < high) {
int mid = (low+high)/2;
mergeSort(arr,low,mid);
mergeSort(arr,mid+1,high);
merge(arr,low,mid,high);
}
}
}