public class QuickSort {
private long[] theArray;
public void quickSort() {
recQuickSort(0, theArray.length-1);
}
//快速排序
public void recQuickSort(int left, int right) {
if(right - left <= 0) return;
else {
//默认以最右边的元素未轴
long pivot = theArray[right];
int partition = partitionIt(left, right, pivot);
//把轴放到中间,这样一边比轴小,一边比轴大
swap(partition, right);
//轴的位置已经定下了,就不用考虑了
recQuickSort(left, partition-1);
recQuickSort(partition+1, right);
}
}
public int partitionIt(int left, int right, long pivot) {
//-1 = 0 - 1;
int leftPtr = left - 1;
//轴不需要考虑,所以不用right-1
int rightPtr = right;
//从左边找起,找到第一个比pivot大的数
//从右边找,找到第一个比pivot小的数
while(true) {
//theArray[最后] == pivot
while(theArray[++leftPtr] < pivot);
while(rightPtr > 0 && theArray[--rightPtr] > pivot);
if(leftPtr >= rightPtr) {
break;
} else {
//交换,继续找
swap(leftPtr, rightPtr);
}
}
return leftPtr;
}
public void swap(int dex1, int dex2) {
long temp = theArray[dex1];
theArray[dex1] = theArray[dex2];
theArray[dex2] = temp;
}
public long[] getTheArray() {
return theArray;
}
public void setTheArray(long[] theArray) {
this.theArray = theArray;
}
}