Java-使用归并排序对整形数组进行排序

package test;

public class Collections1 {
    public static void sort(int a[]){
        int l=0;
        int r=a.length-1;
        //归并
        devide(a,l,r);
    }
    /**
     * 归:分治
     */
    private static void devide(int a[],int left, int right){
        //归
        int mid=(left+right)/2;
        if(left<right){

            devide(a,left,mid);
            devide(a,mid+1,right);
            //并
            merge(a,left,mid,mid+1,right);
        }
    }

    private static void merge(int a[], int left, int mid, int i, int right) {
        int[]temp= new int[a.length];
        int index=left;
        int ls=left,le=mid;//左起~左结束
        int rs=i,re=right;//右start~右end
        //至少把一边排好
        while(ls<=le&&rs<=re){
            if (a[ls]<a[rs]){
                temp[index]=a[ls];
                ls++;
            }else{
                temp[index]=a[rs];
                rs++;
            }
            index++;
        }
        //判断左边是否有剩余
        if(ls<=le){
            for (int j=ls;j<=le;j++){
                temp[index++]=a[j];
            }
        }
        if (rs<=re){
            for (int j=rs;j<=re;j++){
                temp[index++]=a[j];
            }
        }
        for(int j=left;j<=right;j++){
            a[j]=temp[j];
        }
    }


}




package test;

public class TestcCollections {

    public static void main(String[] args) {
        int a[] = {10, 12, 55, 11, 54, 22, 5, 7, 2, 4};
        test.Collections1.sort(a);
        StringBuffer str=new StringBuffer();
        for(int i=0;i<a.length;i++) {
            if(i==a.length-1) {
                str.append(a[i]);
            }else {
                str.append(a[i]+" ");
            }
        }
        String s=str.toString();
        System.out.println(s);
    }

}





发布了64 篇原创文章 · 获赞 47 · 访问量 9569

猜你喜欢

转载自blog.csdn.net/weixin_42194284/article/details/91991740