快排(基础详解入门)
前言
快排是一种高效的排序方法,虽然思维容易理解,但入门稍有难度。为了方便以后理解,于是写下这篇文章。若文章含有错误,欢迎各位纠正 。
一、快排的主要内容
1.快排函数(递归)模板
void QuickSort(int a[], int low, int high) {int i = low,j = high;if(i >= j) return;int temp = a[low];while(i != j) {while(a[j] >= temp && i < j) j--;while(a[i] <= temp && i < j) i++; if(i < j) swap(a[i], a[j]);}swap(a[low], a[i]);QuickSort(a, low, i - 1);QuickSort(a, i + 1, high);
}
2.快排中的“key"
key其实就是相当于隔板(模板中则为temp),用于分开两个部分,key往左的部分小于key,反之往右的部分大于key
二、快排解析
1.过程动态分析
1.首先挑出快排的key (一般以数组第一个数为key),图中最上方为key。
2.第一轮:从low(最低处)往高处开始,找出第一个大于key的数,假设这个数为a;从high(最高处)往低处开始,找出第一个小于key的数,假设为b。交换a,b的位置。
第二轮:同样从low和high开始遍历,找出a,b并交换位置
1.第三轮:当从high遍历到达low之前遍历的地方时,也就是完成交接,则以key为基准的分选结束,然后交换key和交接处的位置,结束第一次的快排。
附上第一次快排代码运行结果
快排整个过程的动态变化
2.快排模板分析
if(i >= j) return; 说明仅含一个数字,无需快排
int temp = a[low]; 选出key
while(i != j) { 当左右遍历交接时结束
……
}
while(a[j] >= temp && i < j) j--; 从low往高处遍历
while(a[i] <= temp && i < j) i++; 从high往低处遍历if(i < j) swap(a[i], a[j]); 交换a,b(a,b为以上的值)位置
swap(a[low], a[i]); 交换key与交接处位置
QuickSort(a, low, i - 1); 对key左边再次快排
QuickSort(a, i + 1, high); 对key右边再次快排
快排(基础详解入门)相关推荐
- c语言中快排函数,c语言快排函数详解
c语言快排函数详解 int cmp(const void *a, const void *b) 返回正数就是说 cmp 传入参数第一个要放在第二个后面, 负数就是传入参数第一个要放第二个前面, 如果是 ...
- Java快排算法详解
快排算法底层基本思想: 先取出数列中的第一个数作为基准数. 将数列中比基准数大的数全部放在他的右边,比基准数小的数全部放在它的左边. 然后在对左右两部分重复第二步,直到各个区间只有一个数. 具体Jav ...
- html入门基础(详解)
html入门基础(详解) 一.HTML 1.HTML:是一种用于创建网页的超文本标记语言(Hyper Text Markup Language) "超文本"就是指页面可以包含图片, ...
- HSQLDB数据库使用详解(入门)及快速使用
hsql数据库使用详解(入门)及快速使用 一.简介: hsql数据库是一款纯Java编写的免费数据库,许可是BSD-style的协议,如果你是使用Java编程的话,不凡考虑一下使用它,相对其 他数据库 ...
- ExoPlayer详解——入门(官方文档)
ExoPlayer详解系列文章 ExoPlayer详解--入门(官方文档) ExoPlayer详解--媒体类型(官方文档) ExoPlayer详解--高级主题(官方文档) 一.ExoPlayer,你好 ...
- 视频教程-FPS游戏逆向与安全+UE4引擎基础详解-其他
FPS游戏逆向与安全+UE4引擎基础详解 想把自己的知识传播出去,让更多人学习到 苏瑞兵 ¥188.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取 ...
- 主线剧情03-NXP-i.MX系列的u-boot移植基础详解
u-boot 移植基础详解 本文系广泛撷取.借鉴和整理(相关的内容在网络上有很多,但很多相互抄,或者是版本太老,或者就是不通用的非常有平台针对性的步骤,碎片化泛滥,甚至就是有待分拣的垃圾厂,当然也有一 ...
- mhdd应用详解-入门篇(图文教程)
mhdd应用详解-入门篇(图文教程) 来源:wxiu.com 作者:fox 时间:2009-03-13 点击: 54 对于专业的 电脑维修人员来说, MHDD是必备的硬盘工具,但是技术人员一般只拿他 ...
- BIOS设置基础详解
BIOS设置基础详解AMI BIOS设置 开机显卡自检测完成后,点击<DEL键>即可进入AMI BIOS SETUP设置界面主菜单. 进入了AMI BIOS NEW SETUP UTILI ...
- 三大快充技术详解 怎样才能发挥最大功效?
三大快充技术详解 怎样才能发挥最大功效? 2016-08-23 10:38 在锂电池技术处于瓶颈时期,快充技术在近一年内快速普及,不光是旗舰机中采用了该技术,甚至在千元入门机内也可以看到,你要没个快充 ...
最新文章
- Linux下用C获取当前系统时间
- JAVA card 应用开发(二) 在项目添加APPLET
- linux DNS辅域
- Swift—初始 (1)
- rust 面向对象之Struct、impl、trait关键字使用
- ConcurrentHashMap的源码分析-resizeStamp
- 01.elasticsearch-security_es鉴权机制
- Linux下载_Linux系统各种版本ISO镜像下载(redhat,centos,oracle,ubuntu,openSUSE)
- spring boot: 支持jsp,支持freemarker
- 结对项目---万年历
- VMware下linux ubuntu 虚拟机复制粘贴-宿主机
- 计算机设计大赛感言,平面设计大赛获奖感言
- MATLAB颜色的使用
- mathcontext保留2位小数_Java BigDecimal subtract()用法及代码示例
- 优势比(Odds Ratios)
- 透明小时钟开发流程与总结
- 交换机的主要技术指标
- python毫秒级别抢购_Python 实现毫秒级淘宝抢购脚本
- 单电源运放全波整流电路
- 计算机u盘驱动坏了如何的修复,U盘损坏五种常见问题的修复方式
热门文章
- 数字后端基本技能之:绕线Congestion怎么解?
- 复旦美女学霸张安琪的五个“神迹”和背后的真实故事
- 郁亮的“权力游戏”,万科的“内外战争”
- lisp6 暖通cad_浩辰CAD暖通2018
- vue中用js将json数据按英文字母顺序进行排序
- WinRAR 破解注册
- 【每日新闻】倪光南:“中国芯”切勿重硬轻软;美国研发出可直接在皮肤上打印的3D打印技术...
- Canonical 在 Linux 上提供 Flutter 桌面应用支持
- 联想E431 win10+Unbutun+Deepin系统安装
- 希尔伯特的23个问题