温故之 “快速排序”
快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实行快速排序。
快速排序的思想
- 在数据集之中,选择一个元素作为"基准"(pivot)。
- 所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
- 对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
举例来说
现在有一个数据集{85, 24, 63, 45, 17, 31, 96, 50}
- 第一步,选择中间的元素45作为"基准"。(基准值可以任意选择,但是选择中间的值比较容易理解。)
- 第二步,按照顺序,将每个元素与"基准"进行比较,形成两个子集,一个"小于45",另一个"大于等于45"。
- 第三步,对两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
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
温故之 “快速排序”相关推荐
- Golang TDD实践报告:快速排序Quick Sort
Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- 数据结构学习(十三)、快速排序
基本思想:通过一趟排序将待排记录分割成独立两个部分,其中一部分记录的关键字均比另一部分记录的关键字小, 则可分别对这两部分继续进行排序,重复操作以上操作,已达到整个序列有序的目的 void Quick ...
- 快速排序(快排)--->注释超详细
基本思想: 1.先选取一个基准值(一般选取数组第一个元素). 2.以第一步选取的基准值为标准,然后从最后一个数值开始一步步向前走将数字与基准值进行比较,如果该值大于基准 ...
- 快速排序的两种实现方法(c语言版本)
经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...
- 【经典算法】快速排序
与归并排序一样,快速排序使用也使用了分治的思想.下面是对一个典型的子数组A[p,...,r]进行快速排序的三步分治过程: 分解:数组A[p,...,r]被划分成两个(可能为空)子数组A[P,...,q ...
- 20140725 快速排序时间复杂度 sTL入门
1.快速排序的时间复杂度(平均时间复杂度为) 数组本身就有序时,效果很差为O(n^2) 2.STl入门 (1) C++内联函数(inline)和C中宏(#define)区别 内联函数有类型检查,宏定义 ...
- java 快排_八大排序-快速排序(搞定面试之手写快排)
概要 快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一.其广泛应用的主要原因是高效,核心算法思想是分而治之.快速排序经常会被作为面试题进行考察,通常的考 ...
- 排序学习之---快速排序
一.前言 快速排序是一种交换排序,它由C. A. R. Hoare在1962年提出. 二.算法思想 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都 ...
最新文章
- 测试在强电磁场下基于HALL的电流传感器 ACS712-5A是否会有到影响?
- 把Autofac玩的和java Spring一样6
- SELinux系列(十五)—auditd日志使用方法详解
- TL9000 电信业质量体系管理标准
- 神经网络机器翻译的实现
- Java实现:挖金矿问题
- 李南江HTML5教程学习心得
- ADAS自动驾驶辅助系统通讯协议「ADASIS Protocol」接口定义解析(二)详细
- C# vb .net实现淡色效果滤镜
- 各位单身狗的福音:表白爱心魔改版
- 单片机加减法计算器_51单片机之4位数加法计算器的设计报告
- VMware虚拟机网络连接的3种方式
- AOJ-AHU-OJ-6 Hero in maze(拓展)
- c语言开发exporter,prometheus数据采集exporter全家桶
- 计算机导论中 网络课程的引入,依托学科课程体系的《计算机导论》课程改革...
- 2021安徽卫生副高考试成绩查询,中国卫生人才网:2021年卫生资格考试成绩现可查询!...
- CCNA路由交换培训
- DNF登陆的时候说连接服务器失败,请检查您的网络。是否启用修复程序进行修复?,win7网络发现不能启用怎么办?-修复win7无法按启动网络发现的方法 - 河东软件园...
- 新垣结衣夫妇的孩子长啥样,用 BabyGAN 预测试试
- 信息检索 Information Retrieval