java归并排序

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}





你可能感兴趣的:(java归并排序)