搜了下js的快速排序,基本上都是白话经典算法[1]那篇文章的"翻译版"而且"翻译"的比原文还绕....
个人觉得坐在马桶看算法[2]的这篇更好理解(给出js实现版本供大家参考)
function quickSort(arr, left, right) {
let i, j, x, temp;
if (left > right) {
return;
}
x = arr[left]; ////x中保存基准数
(i = left), (j = right);
while (i !== j) {
//要从右边开始找,找小于基准数的
while (arr[j] >= x && i < j) {
j--;
}
//再从左边开始找,找大于基准数的
while (arr[i] <= x && i < j) {
i++;
}
//两边都找完之后交换两个数在数组中的位置
if (i < j) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
//i,j "相遇"时将相遇位置的值和基准值(第一个位置的值)互换
arr[left] = arr[i];
arr[i] = x;
quickSort(arr, left, i - 1); //继续处理左边的数组,递归
quickSort(arr, i + 1, right); //继续处理右边的数组,递归
return arr;
}
let arr = [6, 1, 2, 7, 9, 3, 4, 5, 10, 8];
let arr2 = quickSort(arr, 0, 9);
console.log(arr);
console.log(arr2);
参考:MoreWindows 白话经典算法系列之六 快速排序 快速搞定 [1]
啊哈磊 【坐在马桶上看算法】算法3:最常用的排序——快速排序[2]