原理:對於給定的一組記錄,選擇一個基準元素,通常選擇第一個元素或者最後一個元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,然後再用同樣的方法遞歸地排序劃分的兩部分,直到序列中的所有記錄均有序爲止。
代碼:
public class QuickSort {
public static void sort(int a[], int low, int hight) {
int i, j, index;
if (low > hight) {
return;
}
i = low;
j = hight;
index = a[i]; // 用子表的第一個記錄做基準
while (i < j) { // 從表的兩端交替向中間掃描
while (i < j && a[j] >= index)
j--;
if (i < j){
a[i] = a[j];// 用比基準小的記錄替換低位記錄
i++;
}
while (i < j && a[i] < index)
i++;
if (i < j){ // 用比基準大的記錄替換高位記錄
a[j] = a[i];
j--;
}
}
a[i] = index;// 將基準數值替換回 a[i]
sort(a, low, i - 1); // 對低子表進行遞歸排序
sort(a, i + 1, hight); // 對高子表進行遞歸排序
}
public static void quickSort(int a[]) {
sort(a, 0, a.length - 1);
}
public static void main(String[] args) {
int a[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
quickSort(a);
System.out.println(Arrays.toString(a));
}
}
原數組: int a[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
第一次排序後:[27, 38, 13, 49, 76, 97, 65, 49]
之後遞歸49之前數組 與 49之後數組