归并排序
public class MergeSort {
public static void main(String[] args) {
int[] arr = new int[20];
Random rd = new Random();
for (int i = 0; i < arr.length; i++) {
int val = rd.nextInt(100);
arr[i] = val;
}
sort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
private static void sort(int[] a, int lo, int hi) {
if (lo >= hi) {
return;
}
int mid = lo + (hi - lo) / 2;
sort(a, lo, mid);
sort(a, mid + 1, hi);
mergeSort(a, lo, mid, hi);
}
private static void mergeSort(int[] a, int lo, int mid, int hi) {
int[] temp = new int[hi - lo + 1];
int index = 0;
int p = lo;
int q = mid + 1;
while (p <= mid && q <= hi) {
if (a[p] > a[q]) {
temp[index++] = a[q++];
} else {
temp[index++] = a[p++];
}
}
while (p <= mid) {
temp[index++] = a[p++];
}
while (q <= hi) {
temp[index++] = a[q++];
}
System.arraycopy(temp, 0, a, lo, temp.length);
}
}