1. 程式人生 > >排序_快速排序

排序_快速排序

dex nbsp amp public part 需要 劃分 temp val

快速排序利用劃分技術和劃分遞歸。
主要是定義劃分點
遞歸的退出是劃分的當前數據只有一個

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();

    }

}

排序_快速排序