package com.accp;
public class KuaiSu {
/**
* 快速排序<br/>
* <ul>
* <li>從數列中挑出一個元素,稱爲“基準”</li>
* <li>重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割之後,
* 該基準是它的最後位置。這個稱爲分割(partition)操作。</li>
* <li>遞歸地把小於基準值元素的子數列和大於基準值元素的子數列排序。</li>
* </ul>
*
* @param numbers
* @param start
* @param end
*/
public static void quickSort(int[] numbers, int start, int end) {
if (start < end) {
int base = numbers[start]; // 選定的基準值(第一個數值作爲基準值)
int temp; // 記錄臨時中間值
int i = start, j = end;
do {
while ((numbers[i] < base) && (i < end))
i++;
while ((numbers[j] > base) && (j > start))
j--;
if (i <= j) {
temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
i++;
j--;
}
} while (i <= j);
if (start < j)
quickSort(numbers, start, j);
if (end > i)
quickSort(numbers, i, end);
}
}
}