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

快速排序的思想

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

举例来说

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

  1. 第一步,选择中间的元素45作为"基准"。(基准值可以任意选择,但是选择中间的值比较容易理解。)
  2. 第二步,按照顺序,将每个元素与"基准"进行比较,形成两个子集,一个"小于45",另一个"大于等于45"。
  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,比基准大的放在rightfor(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));}

转载于:https://www.cnblogs.com/whkl-m/p/10671855.html

温故之 “快速排序”相关推荐

  1. Golang TDD实践报告:快速排序Quick Sort

    Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...

  2. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  3. 数据结构学习(十三)、快速排序

    基本思想:通过一趟排序将待排记录分割成独立两个部分,其中一部分记录的关键字均比另一部分记录的关键字小, 则可分别对这两部分继续进行排序,重复操作以上操作,已达到整个序列有序的目的 void Quick ...

  4. 快速排序(快排)--->注释超详细

    基本思想:         1.先选取一个基准值(一般选取数组第一个元素).         2.以第一步选取的基准值为标准,然后从最后一个数值开始一步步向前走将数字与基准值进行比较,如果该值大于基准 ...

  5. 快速排序的两种实现方法(c语言版本)

    经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...

  6. 【经典算法】快速排序

    与归并排序一样,快速排序使用也使用了分治的思想.下面是对一个典型的子数组A[p,...,r]进行快速排序的三步分治过程: 分解:数组A[p,...,r]被划分成两个(可能为空)子数组A[P,...,q ...

  7. 20140725 快速排序时间复杂度 sTL入门

    1.快速排序的时间复杂度(平均时间复杂度为) 数组本身就有序时,效果很差为O(n^2) 2.STl入门 (1) C++内联函数(inline)和C中宏(#define)区别 内联函数有类型检查,宏定义 ...

  8. java 快排_八大排序-快速排序(搞定面试之手写快排)

    概要 快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一.其广泛应用的主要原因是高效,核心算法思想是分而治之.快速排序经常会被作为面试题进行考察,通常的考 ...

  9. 排序学习之---快速排序

    一.前言 快速排序是一种交换排序,它由C. A. R. Hoare在1962年提出. 二.算法思想 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都 ...

最新文章

  1. 测试在强电磁场下基于HALL的电流传感器 ACS712-5A是否会有到影响?
  2. 把Autofac玩的和java Spring一样6
  3. SELinux系列(十五)—auditd日志使用方法详解
  4. TL9000 电信业质量体系管理标准
  5. 神经网络机器翻译的实现
  6. Java实现:挖金矿问题
  7. 李南江HTML5教程学习心得
  8. ADAS自动驾驶辅助系统通讯协议「ADASIS Protocol」接口定义解析(二)详细
  9. C# vb .net实现淡色效果滤镜
  10. 各位单身狗的福音:表白爱心魔改版
  11. 单片机加减法计算器_51单片机之4位数加法计算器的设计报告
  12. VMware虚拟机网络连接的3种方式
  13. AOJ-AHU-OJ-6 Hero in maze(拓展)
  14. c语言开发exporter,prometheus数据采集exporter全家桶
  15. 计算机导论中 网络课程的引入,依托学科课程体系的《计算机导论》课程改革...
  16. 2021安徽卫生副高考试成绩查询,中国卫生人才网:2021年卫生资格考试成绩现可查询!...
  17. CCNA路由交换培训
  18. DNF登陆的时候说连接服务器失败,请检查您的网络。是否启用修复程序进行修复?,win7网络发现不能启用怎么办?-修复win7无法按启动网络发现的方法 - 河东软件园...
  19. 新垣结衣夫妇的孩子长啥样,用 BabyGAN 预测试试
  20. 信息检索 Information Retrieval

热门文章

  1. gorm配置logger显示执行的sql
  2. 【收藏】SonarQube-插件-离线安装PMD+阿里P3C
  3. Jenkins CLI命令行工具,助你轻松管理 Jenkins
  4. python3 读取配置文件中的参数值替换yaml文件中的占位符(变量)
  5. vue-cli工程目录结构及相关文件说明
  6. lunbuntu install maven
  7. 利用指针的指针,修改被调函数的局部值【传引用】
  8. 单片机串行收发电路制作记录
  9. Linux 下搭建 Java Web 开发环境
  10. Ubuntu20.04 Desktop image 添加快捷方式