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);
}
快速排序运用了分治法的思想,找到一个基准点,然后将集合分成两部分,左边的小于基准点,右边的大于基准点(从大到小排序的话),这样就将问题分成了结构类似的两个小问题,递归,直到每个集合里就剩下一个数据。每一次排序肯定会给基准点找到正确的位置。