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); }
快速排序運用了分治法的思想,找到一個基准點,然后將集合分成兩部分,左邊的小於基准點,右邊的大於基准點(從大到小排序的話),這樣就將問題分成了結構類似的兩個小問題,遞歸,直到每個集合里就剩下一個數據。每一次排序肯定會給基准點找到正確的位置。