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 中删除了元素,则返回的是含有被删除的元素的数组。

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

  • 相关阅读:
    JAVA中SpringMVC获取bean方法,在工具类(utils)注入service
    JAVA中json对象转JAVA对象,JSON数组(JSONArray)转集合(List)
    maven中pom文件中scope的作用
    页面图片懒加载、延迟加载(lazyload)
    js(jQuery)获取自定义data属性的值
    ubantu使用小结
    ipmitool管理工具
    大于2T的硬盘怎么分区
    lamp的动静分离部署
    keepalived脑裂问题
  • 原文地址:https://www.cnblogs.com/wuconghui/p/9951197.html
Copyright © 2011-2022 走看看