zoukankan      html  css  js  c++  java
  • 深入理解快速排序

    首先,定义一个quickSort函数,它的参数是一个数组。

    var quickSort = function(arr) {

    };

    然后,检查数组的元素个数,如果小于等于1,就返回。

    var quickSort = function(arr) {

      if (arr.length <= 1) { return arr; }

    };

    接着,选择"基准"(pivot),并将其与原数组分离,再定义两个空数组,用来存放一左一右的两个子集。

    var quickSort = function(arr) {

      if (arr.length <= 1) { return arr; }

      var pivotIndex = Math.floor(arr.length / 2) ;

      var pivot = arr.splice(pivotIndex, 1)[0];

      var left = [];

      var right = [];

    };

    然后,开始遍历数组,小于"基准"的元素放入左边的子集,大于基准的元素放入右边的子集。

    var quickSort = function(arr) {

      if (arr.length <= 1) { return arr; }

      var pivotIndex = Math.floor(arr.length / 2) ;

      var pivot = arr.splice(pivotIndex, 1)[0];

      var left = [];

      var right = [];

      for (var i = 0; i < arr.length; i++){

        if (arr[i] < pivot) {

          left.push(arr[i]);

        } else {

          right.push(arr[i]);

        }

      }

    };

    最后,使用递归不断重复这个过程,就可以得到排序后的数组。

    var quickSort = function(arr) {

      if (arr.length <= 1) { return arr; }

      var pivotIndex = Math.floor(arr.length / 2);

      var pivot = arr.splice(pivotIndex, 1)[0];

      var left = [];

      var right = [];

      for (var 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));

    };

    使用的时候,直接调用quickSort()就行了。

    简单的介绍一下上面用到的math.fllor和splice

    floor() 方法执行的是向下取整计算,它返回的是小于或等于函数参数,并且与之最接近的整数。

    splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。

    如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。

    如果想要深入理解最好在编码里面断点来看具体的实现过程

  • 相关阅读:
    Understand Rails Authenticity Token
    正则表达式:数值及数值型字符串三位一组格式化
    ceph主要数据结构解析2-Rados.h文件
    遍历聚合对象中的元素——迭代器模式(三)
    ceph主要数据结构解析3-Ceph_fs.h文件
    linux crontab 定时命令
    mysql数据类型详解
    遍历聚合对象中的元素——迭代器模式(四)
    Eclipse自动插件依赖的一种配置解决方式
    php缓存小技巧
  • 原文地址:https://www.cnblogs.com/wuconghui/p/9951197.html
Copyright © 2011-2022 走看看