package textbookcode;
import java.util.*;
public class MERGESORT {
public static void main(String [] args){
Scanner in=new Scanner(System.in);
System.out.println("请输入数组的大小");
int N=in.nextInt();//从键盘读取数组的大小。
int A[]=new int [N];
System.out.println("请输入数组中的数");
for(int i=0;iq-p){//L[]先越界,直接往A[]后添加R[]没有添加的部分。
A[i]=R[j];
j++;
}
else{//R[]先越界,直接往A[]后添加L[]没有添加的部分。
A[i]=L[k];
k++;
}
}
}
}
}
以数组A{5,2,4,7,1,3,2,6}中的8个数为例:
mergeSort(A,0,7)----A{5,2,4,7,1,3,2,6}
mergeSort(A,0,3)----A{5,2,4,7,1,3,2,6}
mergeSort(A,0,1)----A{5,2,4,7,1,3,2,6}
mergeSort(A,0,0)----A{5,2,4,7,1,3,2,6}
mergeSort(A,1,1)----A{5,2,4,7,1,3,2,6}
merge(A,0,1)数组A中0~0和1~1都有序,所以归并,但操作的还是数组A,只是元素范围是0~1.归并结果A{2,5,4,7,1,3,2,6}
mergeSort(A,2,3)----A{5,2,4,7,1,3,2,6}
mergeSort(A,2,2)---A{5,2,4,7,1,3,2,6}
mergeSort(A,3,3)---A{5,2,4,7,1,3,2,6}
merge(A,2,3)数组A中2~2和3~3都有序,所以归并,但操作的还是数组A,只是元素范围是2~3.归并结果A{2,5,4,7,1,3,2,6}
merge(A,0,3)数组A中0~1和2~3都有序,所以归并,归并结果A{2,4,5,7,1,3,2,6}
mergeSort (A,4,7)----A{2,5,4,7,1,3,2,6}同理,结果为A{2,5,4,7,1,2,3,6}
merge(A,0,7)数组A中0~3和4~7都有序,所归并,归并结果为A{1,2,2,3,4,5,6,7}