编辑代码

class Main {
	public static void main(String[] args) {
        int[] a={2,14,21,23,45,2,1,13};
        int[] b={2,1,345,2,12,35,312,46,5,32,0};
        int[] c={7,43,2,4,53,4,6,44,3,43};
        int[] d={0};
        int[] e={1,2,3,4,5};
        int[] f={5,4,3,2,1};
        sort(a,0,a.length);
        display(a);
        sort(b,0,b.length);
        display(b);
        sort(c,0,c.length);
        display(c);
        sort(d,0,d.length);
        display(d);
        sort(e,0,e.length);
        display(e);
        sort(f,0,f.length);
        display(f);
    }
    public static void display(int[] arr){
        for (int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    //归并排序-移指针
    //分解
    public  static boolean sort(int[] arr,int arrStart,int arrEnd){
        boolean ok=false;
        int mid=(arrStart+arrEnd)/2;
        if((arrEnd-arrStart)<=2){
            hebing(arr,arrStart,mid,arrEnd);
//            System.out.println(arrStart+","+arrEnd);
            ok=true;
        }else {
            sort(arr,arrStart,mid);
            sort(arr,mid,arrEnd);
            hebing(arr,arrStart,mid,arrEnd);
//        System.out.println(arrStart+","+arrEnd);
            ok=true;
        }
        return ok;
    }

    //合并
    public static void hebing(int[] arr,int start,int mid,int end){
        int index1=start;
        int index2=mid;
        for (int i=mid;i<end;i++){
            int temp=arr[index2];
            while (true){
                if(arr[index1]<temp){index1++;continue;}
                else {
                    if(index1==index2){}
                    else if(arr[index1]==temp){
                        if(index2-index1==1){
                        }
                        else {
                            for (int j=index2;j>index1+1;j--){
                                arr[j]=arr[j-1];
                            }
                            arr[index1+1]=temp;
                        }
                    }
                    else if(arr[index1]>temp){
                        for (int j=index2;j>index1;j--){
                            arr[j]=arr[j-1];
                        }
                        arr[index1]=temp;
                    }
                }
                break;
            }
            index1++;
            index2++;
        }
    }
}