排序_快速排序
阿新 • • 發佈:2017-12-24
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 intsize() { 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(intleft,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(); } }
排序_快速排序