最基本的划分点由数组的最后一个值来确定,现在是将数组的最后一个值的前一个数值作为划分点,但是需要经过三项取一方法的变换,最后它位置上的值是三个中最大的。
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;ja[center]) swap(left, center); if(a[left]>right) swap(left, right); if(a[center]>a[right]) swap(center, right); swap(center, right-1); return a[right-1]; } private void manualSort(int left, int right) { int size=right-left+1; //判断当前需要划分的数组的大小 if(size<1) return; if(size==2) { if(a[left]>a[right]) { swap(left, right); return ; } }else { if(a[left]>a[right-1])swap(left, right-1); if(a[left]>a[right])swap(left, right); if(a[right-1]>a[right])swap(right-1, right); } } public int partitionIt(int left,int right,long pivot) { int leftPtr=left; int rightPtr=right-1; while(true) { //左边找大于特定值的 while( a[++leftPtr] pivot); if(leftPtr>=rightPtr) break; else //交换指向的值 swap(leftPtr, rightPtr); } swap(leftPtr, right-1); 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(); }}