import java.util.Arrays;public class SortTest { public static void merge(int a[], int first, int mid, int last) {
int i, j, k;
i = first;
j = mid + 1;
k = 0; int[] tmp= new int[a.length];
while (i <= mid && j <= last) {
if (a[i] <= a[j])
tmp[k++] = a[i++];
else
tmp[k++] = a[j++];
}
while (i <= mid)
tmp[k++] = a[i++];
while (j <= last)
tmp[k++] = a[j++];
while(first <= last) {
a[first] = tmp[first ++];
}
} public static void mergeSort(int a[], int first, int last) {
if(first < last) {
int mid = (first + last) / 2;
mergeSort(a, first, mid);
mergeSort(a, mid + 1, last);
merge(a, first, mid, last);
}
}
public static void mergeArray(int[] a) {
mergeSort(a, 0, a.length - 1);
}
public static void main(String[] args) {
int[] a = { 5, 7, 3, 9, 2, 1, 4, 6, 8 };
mergeArray(a); //归并排序 for (int i = 0; i < a.length; i++)
System.out.println(Arrays.toString(a)); }
}输出结果为:
[0, 0, 0, 0, 0, 0, 3, 5, 7]
是我看了书和网上的帖子自己写的,现在找到错误了
while(first <= last) {
a[first] = tmp[first ++];
} 改成k = 0;
while (first <= last) {
a[first++] = tmp[k++];
}