zoukankan      html  css  js  c++  java
  • 温故之 “快速排序”

    快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实行快速排序。

    快速排序的思想

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

    举例来说

    现在有一个数据集{85, 24, 63, 45, 17, 31, 96, 50}

    1. 第一步,选择中间的元素45作为"基准"。(基准值可以任意选择,但是选择中间的值比较容易理解。)
      image
    2. 第二步,按照顺序,将每个元素与"基准"进行比较,形成两个子集,一个"小于45",另一个"大于等于45"。
      image
    3. 第三步,对两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
      function quickSort(arr){
          if (arr.length <= 1){ return arr; } //如果数组<=1,则直接结束递归
          // 定义基准,并把基准从原数组删除
          var pivotIndex = Math.floor(arr.length / 2);
          var pivot=arr.splice(pivotIndex,1)[0];
          // 定义左右数组
          var left = [];
          var right = [];
          // 比基准小的放在left,比基准大的放在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));
      }
    
  • 相关阅读:
    每次任务 创建 一个 Scheduler,运行完直接shutdown ,同时运行不相互影响.
    get 和 post 的区别
    jq ajax
    h5
    reset
    ajax
    手机端
    IE浏览器下LI的默认高度
    IE FF 支持li:hover,但是ie6不支持,a:hover ul 这种写法是要搭配顶部针对IE6声明用的
    ie7/8卸载工具 降级到IE6
  • 原文地址:https://www.cnblogs.com/whkl-m/p/10671855.html
Copyright © 2011-2022 走看看