算法 - 快速排序 - javascript 版

非递归快速排序

function quickSort(num) {
  const list = [[0, num.length - 1]];
  while (list.length > 0) {
    let now = list.pop();
    if (now[0] >= now[1]) {
      continue;
    }
    let i = now[0],
      j = now[1],
      flag = now[0];
    while (i < j) {
      while (num[j] >= num[flag] && j > flag) j--;
      if (i >= j) break;
      while (num[i] <= num[flag] && i < j) i++;

      const temp = num[flag];
      num[flag] = num[j];
      num[j] = num[i];
      num[i] = temp;
      flag = i;
    }
    list.push([now[0], flag - 1]);
    list.push([flag + 1, now[1]]);
  }
  return num;
}
console.log(quickSort([4, 6, 3, 2, 1]));

递归法

function quickSort(num, left, right) {
  if (left === undefined) left = 0;
  if (right === undefined) right = num.length - 1;
  if (left >= right) return;
  let i = left,
    j = right,
    flag = left;
  while (i < j) {
    while (num[j] >= num[flag] && j > flag) j--;
    if (i >= j) break;
    while (num[i] <= num[flag] && i < j) i++;
    
    const temp = num[flag];
    num[flag] = num[j];
    num[j] = num[i];
    num[i] = temp;
    flag = i;
  }
  quickSort(num, left, flag - 1);
  quickSort(num, flag + 1, right);
  return num;
}

console.log(quickSort([4, 6, 3, 2, 1]));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值