public static void merge(int a[], int low, int mid, int high){
int temp[] = new int[high - low + 1];
int i = low; //左指针
int j = mid + 1; //右指针
int k = 0;
//把较小的数先移到新数组里
while (i<=mid && j<=high){
if (a[i] < a[j]) {
temp[k++] = a[i++];
}
else {
temp[k++] = a[j++];
}
}
//把左边的剩余的数移入数组
while (i <= mid){
temp[k++] = a[i++];
}
//把右边的剩余的数移入数组
while (j <=high){
temp[k++] = a[j++];
}
//新数组中的数覆盖原数组
for (int k2 = 0; k2 < temp.length; k2++) {
a[k2+low] = temp [k2];
}
}
public static void mergesort(int a[], int low, int high) {
int mid = (low+high)/2;
//递归
if (low < high) {
mergesort(a, low, mid);
mergesort(a, mid+1, high);
merge(a, low, mid, high);
}
}
public static void main(String[] args) {
int a[] = { 51, 46, 20, 18, 65, 97, 82, 30, 77, 50 };
mergesort(a, 0, a.length - 1);
System.out.println("排序结果:" + Arrays.toString(a));
}
结果