public class test {
public static void main(String[] args) {
int N = 10;
int[] a = new int[N];
for (int i = 0; i < N; i++) {
a[i] = (int) (Math.random() * 100);
System.out.print(a[i] + "\t");
}
System.out.println();
sort(a, 0, N - 1);
for (int i = 0; i < N; i++) {
System.out.print(a[i] + "\t");
}
}
private static void sort(int[] a, int left, int right) {
int middle = (left + right) / 2;
if (left != middle) {
sort(a, left, middle);
}
if (middle + 1 != right) {
sort(a, middle + 1, right);
}
// 临时数组,存储left到right排序后的有序序列
int[] b = new int[right - left + 1];
int l = left;
int r = middle + 1;
int i = 0;
while (l <= middle && r <= right) {
b[i++] = a[l] < a[r] ? a[l++] : a[r++];
}
while (l <= middle) {
b[i++] = a[l++];
}
while (r <= right) {
b[i++] = a[r++];
}
// 把left到right的有序序列,赋值给原数组
for (i = right - left; i >= 0; i--) {
a[left + i] = b[i];
}
}
}