归并排序是相当于将一个数组分为有序数组,在进行合并。
也就是将每个数当成一个有序数组,一 一合并在两两合并
知道将数组合并完。这里一个方法用来递归数组,也就是理论上将数组分离
第二个方法是将其进行合并(有序数组的合并)
这种归并如果不熟悉的人很容易报异常,所以多多分析。
1 public void joinSort(int[] a,int start,int end) { 2 int mid=(start+end)/2; 3 if(start<end) { 4 //递归调用将数组分为前一半 5 joinSort(a,start,mid); 6 //将数组分为后一半 7 joinSort(a,mid+1,end); 8 //调用合并两个有序数组 9 merge(a,start,end,mid); 10 } 11 } 12 public void merge(int[] a,int start,int end,int mid ) { 13 int[] temp=new int[a.length]; 14 int i=start,j=mid+1,k=start; 15 int tmp=start; 16 while(i<=mid&&j<=end) { 17 if(a[i]<a[j]) { 18 temp[k++]=a[i++]; 19 }else{ 20 temp[k++]=a[j++]; 21 } 22 } 23 //如果哪里写的出了点小差错,很容易遭成数组索引越界的异常,所以一定要想好 24 while(k<=end) { 25 if(i<=mid) { 26 temp[k++]=a[i++]; 27 }else { 28 temp[k++]=a[j++]; 29 } 30 } 31 while(tmp<=end){ 32 a[start++]=temp[tmp++]; 33 } 34 }
时间: 2024-10-16 21:41:25