function quickSort(arr, low, high){
let i = low; //哨兵
let j = high;//哨兵
let pivot = arr[low];
if(i >= j) {
return;
}
while(i != j){
while(i < j && arr[j] >= pivot)
j--;
while(i < j && arr[i] <= pivot)
i++;
if(i < j) {
let temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
arr[low] = arr[i];//每一次排序后將基准點放在正確的位置
arr[i] = pivot;
quickSort(arr, low, i -1);
quickSort(arr, i + 1, high);
}
這樣可以少一個變量:
function quickSort(arr, low, high){
let i = low;
let j = high;
let pivot = arr[low];
if(i >= j) {
return;
}
while(i != j){
while(i < j && arr[j] >= pivot)
j--;
if(i < j)
arr[i] = arr[j];
while(i < j && arr[i] <= pivot)
i++
if(i < j)
arr[j] = arr[i];
}
arr[i] = pivot;
quickSort(arr, low, i -1);
quickSort(arr, i + 1, high);
}
快速排序運用了分治法的思想,找到一個基准點,然后將集合分成兩部分,左邊的小於基准點,右邊的大於基准點(從大到小排序的話),這樣就將問題分成了結構類似的兩個小問題,遞歸,直到每個集合里就剩下一個數據。每一次排序肯定會給基准點找到正確的位置。
