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));
      }
    
  • 相关阅读:
    mysql 优化20点
    java function
    设计模式 概览
    Linux安装java1.8并配置环境变量
    windows下一次执行多个sql文件
    mybatis查询结果为空时的返回值问题
    Java中Json与String互转
    SSM Service自动注入失败
    本地安装Mysql5.7过程中出现的一系列问题
    解决本地工具无法连接服务器上的mysql的问题
  • 原文地址:https://www.cnblogs.com/whkl-m/p/10671855.html
Copyright © 2011-2022 走看看