什么是快速排序?

快速排序(Quicksort)使用分治法策略
选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

如何实现快速排序

  • 从数列中挑出一个基准值
  • 将所有比基准值小的摆放在基准前面,所有比基准值大的摆在基准的后面(相同的数可以到任一边);在这个分区退出之后,该基准就处于数列的中间位置
  • 递归地把”基准值前面的子数列”和”基准值后面的子数列”进行排序

快速排序.jpeg

  1. // 快速排序
  2. function quickSort(arr) {
  3. if (arr.length < 1) {
  4. return arr;
  5. }
  6. const leftArr = [];
  7. const rightArr = [];
  8. // 删除是为了保证传进的数据不存在跟自己对比,
  9. // 如果不删除会导致永远存在一条数据进入死循环
  10. const currentNum = arr.splice(0, 1);
  11. arr.forEach(item => {
  12. if (item < currentNum) {
  13. leftArr.push(item);
  14. } else {
  15. rightArr.push(item);
  16. }
  17. })
  18. return [
  19. ...quickSort(leftArr),
  20. ...currentNum,
  21. ...quickSort(rightArr)
  22. ];
  23. }
  24. // 随机生成一个数组、测试排序的性能
  25. function RandomNumArr() {
  26. const arr = [];
  27. for(let i = 0; i < 1000000; i++) {
  28. arr.push(parseInt(Math.random()*1000));
  29. }
  30. console.log(new Date());
  31. return arr;
  32. }
  33. // console.log(quickSort([2,9,20,0,30,22,3,1,94,2]))
  34. console.log(quickSort(RandomNumArr()));
  35. // console.log(new Date());