快速排序利用划分技术和划分递归。
主要是定义划分点
递归的退出是划分的当前数据只有一个
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(); } }