第 46 天: 快速排序
/**
* Quick sort recursive.
*
* @param paraStart The start index.
* @param paraEnd The end index.
*/
private void quickSortRecursive(int paraStart, int paraEnd) {
if (paraStart < paraEnd) {
int tempPivot = pivot(paraStart, paraEnd);
System.out.print("From " + paraStart + " to " + paraEnd + " :");
System.out.println(this);
quickSortRecursive(paraStart, tempPivot - 1);
quickSortRecursive(tempPivot + 1, paraEnd);
}// Of if
}// Of quickSortRecursive
private int pivot(int paraStart, int paraEnd) {
DataNode tempNode = data[paraEnd];
while (paraStart < paraEnd) {
while (paraStart < paraEnd && data[paraStart].key < tempNode.key) paraStart++;
data[paraEnd] = data[paraStart];
while (paraStart < paraEnd && data[paraEnd].key > tempNode.key) paraEnd--;
data[paraStart] = data[paraEnd];
}// Of while
data[paraStart] = tempNode;
return paraStart;
}//Of pivot
public void quickSort(){
quickSortRecursive(0,length-1);
}// Of quickSort
/**
* Test unit
*/
public static void quickSortTest() {
int[] tempUnsortedKeys = {1, 3, 12, 10, 5, 7, 9};
String[] tempContents = {"if", "then", "else", "switch", "case", "for", "while"};
DataArray tempDataArray = new DataArray(tempUnsortedKeys, tempContents);
System.out.println(tempDataArray);
tempDataArray.quickSort();
System.out.println("Result\r\n" + tempDataArray);
}// Of quickSortTest
我一般习惯把快排里面的基准划分单独摘出来,可以很清晰地看到递归那几句