2020-06-08 快速排序(js version)

152 阅读1分钟

搜了下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]