0002归并排序

来源:互联网 发布:阿里云软件 编辑:程序博客网 时间:2024/05/16 11:13

public class sort {
    int[] arr;
    public sort(int[] arr){
        this.arr = arr;
    }
    
    public int[] sortArr(){
        //
        return sortArr1(this.arr);
    }
    
    private int[] sortArr1(int[] arr){
        //如果数组的长度=1,直接返回这个数组
        if(arr.length ==1){
            return arr;
        }
        
        //如果数组长度>1 ,2分解然后对分解后的数组各自排序
        int fen = arr.length/2;
        int[] arrLeft = new int[fen];
        int[] arrRight = new int[arr.length-fen];
        int i=0;
        for(int a:arr){
            if(i<fen){
                arrLeft[i] = a;
            }else{
                arrRight[i-fen] = a;
            }
            i++;
        }
        int[] arrLeftOk = sortArr1(arrLeft);
        int[] arrRightOk = sortArr1(arrRight);
        
        
        //把两个已经排好序的数组合并
        int[] arrOk = new int[arrLeftOk.length+arrRightOk.length];
        int Llen=0;
        int Rlen = 0;
        
        while(true){
            
            if(Llen==(arrLeftOk.length)&&Rlen==(arrRightOk.length)){
                break;
            }
            
            if(Llen==arrLeftOk.length){
                arrOk[Llen+Rlen] = arrRightOk[Rlen];
                Rlen++;
                continue;
            }
            
            if(Rlen==arrRightOk.length){
                arrOk[Llen+Rlen] = arrLeftOk[Llen];
                Llen++;
                continue;
            }
            
            if(arrLeftOk[Llen] >= arrRightOk[Rlen]){
                arrOk[Llen+Rlen] = arrRightOk[Rlen];
                Rlen++;
            }else{
                arrOk[Llen+Rlen] = arrLeftOk[Llen];
                Llen++;
            }
        }
        
        
        return arrOk;
    }
    
    public static void main(String[] args) {
        //int[] c = {1,2,2,0,2,2,2,2,3,4,5,6,7,8,9,1};
        int[] c =new int[1000000];
        int i=0;
        while(true){
            if(i>=1000000) break;
            c[i]=1000000-i;
            i++;
        }
        
        sort s = new sort(c);
        int[] b = s.sortArr();
        for(int b1:b){
            System.out.println(b1+",");
        }
    }
}


原创粉丝点击