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