排序_快速排序

快速排序利用划分技术和划分递归。
主要是定义划分点
递归的退出是划分的当前数据只有一个

public class ArrayIns {
    private long [] a;
    private int nElems;
    public ArrayIns(int maxSize) {
        a=new long[maxSize];
        nElems=0;
    }
    public void insert(long value) {
        a[nElems]=value;
        nElems++;
    }
    public int size() {
        return nElems;
    }
    public void display() {
        for(int j=0;j<nElems;j++) {
            System.out.print(a[j]+" ");
        }
        System.out.println();
    }
    public void quickSort() {
        recQuickSort(0, nElems-1);
    }
    //递归方法
    public void recQuickSort(int left,int right) {
        if(right-left<=0) {
            return;//当需要划分的当前数组的数据为1,就不用划分了
        }else{
            long pivot=a[right];//划分点(就是当前数组的最后一个值)
            int partition=partitionIt(left, right, pivot);  //由划分方法return得到
            recQuickSort(left, partition-1);//前部分再划分
            recQuickSort(partition, right);//后部分再划分
        }
    }
    public int partitionIt(int left,int right,long pivot) {
        int leftPtr=left-1;
        int rightPtr=right;
        while(true) {
            //左边找大于特定值的
            while(a[++leftPtr]<pivot);
            //右边找小于特定值的
            while(rightPtr>0 && a[--rightPtr]>pivot);
            if(leftPtr>=rightPtr) break;
            else
                //交换指向的值
                swap(leftPtr, rightPtr);
        }
        swap(leftPtr, right);
        return leftPtr;
        
    }
    public void swap(int dex1,int dex2) {
        long temp;
        temp=a[dex1];
        a[dex1]=a[dex2];
        a[dex2]=temp;
    }

}
public class Test {

    public static void main(String[] args) {
        int maxSize=100;
        ArrayIns arrayPar=new ArrayIns(maxSize);
        arrayPar.insert(60);
        arrayPar.insert(30);
        
        arrayPar.insert(80);
        arrayPar.insert(10);
        arrayPar.insert(70);
        arrayPar.insert(90);
        arrayPar.insert(00);
        arrayPar.insert(20);
        arrayPar.insert(40);
        arrayPar.display();
        arrayPar.quickSort();
        arrayPar.display();

    }

}

 

posted @ 2017-12-24 10:21  S-Mustard  阅读(197)  评论(0编辑  收藏  举报