package my;
public class MyMergeSort {
public static void mergeSort(int[] a, int left, int right, int[] b) {
int mid = 0;
if (left < right) {
mid = (left + right) / 2;
mergeSort(a, left, mid, b);
mergeSort(a, mid + 1, right, b);
merge(a, left, mid, right, b);
System.out.println("left mid right:"+left +" "+mid+" "+right);
}
}// 归并排序
public static void merge(int[] a, int left, int mid, int right, int[] b) {
int i = left;
int j = mid + 1;
int p = 0;
while (i <= mid && j <= right) {
b[p++] = (a[i] <= a[j]) ? a[i++] : a[j++];
}//
while (i <= mid)
b[p++] = a[i++];
while (j <= right)
b[p++] = a[j++];
for (p = 0, i = left; i <= right; i++, p++)
a[i] = b[p];
}// 合并两个数组
public static void main(String[] args) {
int[] a = { 21, 34, 56, 43, 99, 37 };
int[] b = new int[a.length];// 辅助数组
int left = 0;
int right = a.length - 1;
mergeSort(a, left, right, b);
for (int i = 0; i <= right; i++)
System.out.print(a[i] + " ");
}// main
}