快速排序

154 阅读1分钟

学算法的难度就在于你动手,理解思想不难,更多的是写对。

快速排序的思想:

1.想象你是一个体育委员,你对面的同学为 [12,3,7,21,5,94,6]

2.方法:😊 <<< 以某某为基准,小的去前面,大的去后面 >>>

3.你只需要重复说这句话,就能排序。

用图来说明一下:

体育委员先选中了21,然后进行了第一次排序,比21小的往前走,比21大的靠后,然后21就确定了位置。

然后委员选中了5,然后比5小的往前走,比5大的靠后,然后5的位置确定了

这时数字被分成了2组🤢[3,4] 和 [12,7,9,6],然后体育委员先去[3,4]

[3,4] 里面,体育委员选中了3,然后比3小的往前走,比3大的靠后,然后3的位置确定了

这个时候没有完,[4]会被单独指定,很显然就他一个,然后4的位置也确定了

[12,7,9,6]里面……

可以看出,数组里面有8个数,那么就得选8次基准。 实际程序如下:

// 快速排序

let quickSort = arr => {
  if (arr.length <= 1) { return arr; }
  let pivotIndex = Math.floor(arr.length / 2);
  let pivot = arr.splice(pivotIndex, 1)[0];
  let left = [];
  let right = [];
  for (let i = 0; i < arr.length; i++){
    if (arr[i] < pivot) { left.push(arr[i])
    } else { right.push(arr[i]) }
  }
  return quickSort(left).concat(
             [pivot], quickSort(right) )
}

代码注释会慢慢加! 善用console.log() 大法,我后面的博客会专门讲 打断点。