快排是一个递归算法,思想是从数组中选一个参照,剩余数组中小于参照的添加到一个新数组,大于的添加到另一个新数组,然后再对这两个新数组进行上面的步骤。

感觉之前文章的博主对快排的解释有点复杂,所以就不用它的动图了,这里图里面的参照就是中间那条横线,应该是所在数组的平均值。

1258817-20190325195811497-310078615

其实参照不唯一,可以取平均值,也可以是数组中任意一个数值,这里我们就取第一个数值作为参照:

js代码:

function quickSort(data) {
  // 递归出口,当数组个数为0或者1
  if (data.length <= 1) {
    return data;
  }
  const flag = data[0];
  const leftArr = [];
  const rightArr = [];
  for (let i = 1; i < data.length; i++) {
    if (data[i] < flag) {
      leftArr.push(data[i])
    } else {
      rightArr.push(data[i])
    }
  }
  // 数组的concat方法也一样
  return [...arguments.callee(leftArr), flag, ...arguments.callee(rightArr)];
}

觉得作者写得不错?不妨轻击下方按钮~

赏点银子给楼主凑凑买咖啡喝吧
微信
支付宝
扫码打赏,建议金额1-10元

Copied From 畅言