前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript如何快速排序

JavaScript如何快速排序

作者头像
Javanx
发布2019-09-04 15:28:30
4710
发布2019-09-04 15:28:30
举报
文章被收录于专栏:web秀web秀

基本思想

1 在数据集之中,选择一个元素作为"基准"(pivot)。 2 所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。 3 对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

举个栗子

代码语言:javascript
复制
    let array = [2, 9, 6, 3, 80, 34, 7, 8];
JavaScript如何快速排序
JavaScript如何快速排序
代码语言:javascript
复制
    function quickSort(list) {
      if(list.length <= 1) { return list; }
      let left = [], right = [];
      let pivotIndex = Math.floor(list.length / 2);
      let pivot = list.splice(pivotIndex, 1)[0];

      for(let index = 0, len = list.length; index < len; index++) {
        let val = list[index];

        if(val <= pivot) {
          left.push(val);
        } else {
          right.push(val);
        }
      }

      return [...quickSort(left), pivot, ...quickSort(right)];
    }

输出: [2, 3, 6, 7, 8, 9, 34, 80]

quickSort函数解构

代码语言:javascript
复制
      let left = [], right = [];
      let pivotIndex = Math.floor(list.length / 2);
      let pivot = list.splice(pivotIndex, 1)[0];

      for(let index = 0, len = list.length; index < len; index++) {
        let val = list[index];

        if(val <= pivot) {
          left.push(val);
        } else {
          right.push(val);
        }
      }

这部分逻辑正是对基本思想中的1、2点的实践。

  • #### 1 找出基准数
代码语言:javascript
复制
      let pivotIndex = Math.floor(list.length / 2);
      let pivot = list.splice(pivotIndex, 1)[0];
  • #### 2 以“基准”二分数组
代码语言:javascript
复制
      for(let index = 0, len = list.length; index < len; index++) {
        let val = list[index];

        if(val <= pivot) {
          left.push(val);
        } else {
          right.push(val);
        }
      }
  • #### 3 重复1、2点

在栗子中的数组执行一次1、2点实现后,你会发现此时执行后出现三个结果 1)letf = [2]; 2)pivot = 3; 3)right = [9, 6, 80, 34, 7, 8];

然后依次组合

代码语言:javascript
复制
    [...left, pivot, ...right]
    // [2, 3, 9, 6, 80, 34, 7, 8]

你会发现left只有一个元素,那就没有必要继续对left排序,所以没有必要再排序

代码语言:javascript
复制
    if(list.length <= 1) { return list; }

然后再看right,并不是有序数组。那要怎么办?继续对right排序,调用quickSort

代码语言:javascript
复制
    quickSort(right)
    // [...quickSort(left), pivot, ...quickSort(right)];

代码语言:javascript
复制
    return [...quickSort(left), pivot, ...quickSort(right)];

正是对第3点的实践。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年10月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本思想
  • 举个栗子
  • quickSort函数解构
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档