如图,为sort()方法的过程:
package javase0919;
public class RecursionTest {
private static int[] arr={2,56,8,6,95,45,23,15,75,6};
public static void main(String[] args) {
intsort(0,arr.length-1);
for(int v:arr)
System.out.print(v+" ");
}
/**
*将数组分割最小
*/
public static void intsort(int l,int r){
if(r>l){
int n=(l+r)/2;
intsort(l,n);
intsort(n+1,r);
sort(l,n,r);
}
}
/**
*合并两个排好序的数组
*/
public static void sort(int l,int n,int r){
/**
*创建两个数组,用原数组对应元素填充
*/
int[] L=new int[n-l+1];
int[] R=new int[r-n];
for(int i=0;i<L.length;i++)
L[i]=arr[l+i];//找到对应的数组元素
for(int j=0;j<R.length;j++)
R[j]=arr[j+n+1];//找到对应数组元素
int i=0,j=0;
for(int k=l;k<r;k++){
if(L[i]<=R[j]){//判断左右数组相对较小值
arr[k]=L[i];//修改原数组的值
i++;
}else{
arr[k]=R[j];
j++;
}
/**
*当左或右数组到达边界时,直接把另一个数组剩下的值直接赋予原数组
*/
if(i>=L.length){
for(;j<R.length;j++){
k++;
arr[k]=R[j];
}
return;
}
if(j>=R.length){
for(;i<L.length;i++){
k++;
arr[k]=L[i];
}
return;
}
}
}
}