package cn.com.uangel.insertionsort;
public class MergeSort {
public static void main(String[] args) {
int A[] = { 8, 2, 4, 9, 3, 6, 3 };
mergeSort(A, 0, A.length - 1);
}
/**
* Sort A[p .. r] with Merge Sort
*/
public static void mergeSort(int[] A, int p, int r) {
if (p < r) {
int q = (p + r) / 2;
mergeSort(A, p, q);
mergeSort(A, q + 1, r);
merge(A, p, q, r);
}
for (int i = 0; i < A.length; i++) {
System.out.print(A[i]);
}
System.out.println("每一分支结束");
}
/**
* merge sorted A[p .. q] and A[q+1 .. r] into A[p .. r]
*/
private static void merge(int[] A, int p, int q, int r) {
int[] L = new int[q - p + 1];
int[] R = new int[r - q];
// System.out.println("q - p + 1 ::"+(q - p + 1)+"L.length: "+L.length);
for (int i = 0; i < L.length; i++) {
L[i] = A[p + i];
}
for (int j = 0; j < R.length; j++) {
R[j] = A[q + 1 + j];
}
int i = 0;
int j = 0;
int k = p;
while (i < L.length && j < R.length) {
if (L[i] < R[j]) {
A[k++] = L[i++];
} else {
A[k++] = R[j++];
}
}
// for(int m=0;m<L.length;m++){
// System.out.println("L中的元素"+L[m]);
// }
//
// for(int n=0;n<R.length;n++){
// System.out.println("R中的元素"+R[n]);
// }
// System.out.println("i:"+i);
// System.out.println("j:"+j);
while (i < L.length) {
A[k++] = L[i++];
}
while (j < R.length) {
A[k++] = R[j++];
}
}
}