Java算法--sorted

abstract class Algrithm<T> {

    private T[] pri = null;
    public abstract boolean cmp(T x, T y);
    public void sorted(T [] arr){
        sorted(arr,0,arr.length);
    }

    public void sorted(T [] arr,int start,int end){

        pri = arr.clone();

        qsorted(arr,start,end);
    }
    public void sorted(List<T> arr){

        sorted(arr,0,arr.size());
    }
    public void sorted(List<T> arr,int start,int end){

        pri = (T[]) arr.toArray();

        qsorted(arr,start,end);

    }
    private void qsorted(T [] arr,int start,int end){
        if(start>=end-1)return ;
        int e = (end-start)/2+start;
        //System.out.println(start+","+e+","+end);
        qsorted(arr,start,e);
        qsorted(arr,e,end);

        int tail=0;

        for(int i=start,j=e;i<e||j<end;){
            if(i<e&&j<end){
                if(cmp(arr[i],arr[j])){
                    pri[tail++]=arr[i++];
                }else pri[tail++]=arr[j++];
            }else if(i<e){
                pri[tail++]=arr[i++];
            }else pri[tail++]=arr[j++];
        }
        for(int i=start,j=0;i<end;i++){
            arr[i]=pri[j++];
        }

    }
    private void qsorted(List<T> arr,int start,int end){
        if(start==end-1)return ;
        int e = (end-start)/2+start;
        qsorted(arr,start,e);
        qsorted(arr,e,end);

        int tail=0;

        for(int i=start,j=e;i<e||j<end;){
            if(i<e&&j<end){
                if(cmp(arr.get(i),arr.get(j))){
                    pri[tail++]=arr.get(i++);
                }else pri[tail++]=arr.get(j++);
            }else if(i<e){
                pri[tail++]=arr.get(i++);
            }else pri[tail++]=arr.get(j++);
        }
        for(int i=0;i<end-start;i++){
            arr.set(i+start,pri[i]);
        }
    }

}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务