前言

快排是一种高效的排序方法,虽然思维容易理解,但入门稍有难度。为了方便以后理解,于是写下这篇文章。若文章含有错误,欢迎各位纠正 。 


一、快排的主要内容

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右边再次快排

快排(基础详解入门)相关推荐

  1. c语言中快排函数,c语言快排函数详解

    c语言快排函数详解 int cmp(const void *a, const void *b) 返回正数就是说 cmp 传入参数第一个要放在第二个后面, 负数就是传入参数第一个要放第二个前面, 如果是 ...

  2. Java快排算法详解

    快排算法底层基本思想: 先取出数列中的第一个数作为基准数. 将数列中比基准数大的数全部放在他的右边,比基准数小的数全部放在它的左边. 然后在对左右两部分重复第二步,直到各个区间只有一个数. 具体Jav ...

  3. html入门基础(详解)

    html入门基础(详解) 一.HTML 1.HTML:是一种用于创建网页的超文本标记语言(Hyper Text Markup Language) "超文本"就是指页面可以包含图片, ...

  4. HSQLDB数据库使用详解(入门)及快速使用

    hsql数据库使用详解(入门)及快速使用 一.简介: hsql数据库是一款纯Java编写的免费数据库,许可是BSD-style的协议,如果你是使用Java编程的话,不凡考虑一下使用它,相对其 他数据库 ...

  5. ExoPlayer详解——入门(官方文档)

    ExoPlayer详解系列文章 ExoPlayer详解--入门(官方文档) ExoPlayer详解--媒体类型(官方文档) ExoPlayer详解--高级主题(官方文档) 一.ExoPlayer,你好 ...

  6. 视频教程-FPS游戏逆向与安全+UE4引擎基础详解-其他

    FPS游戏逆向与安全+UE4引擎基础详解 想把自己的知识传播出去,让更多人学习到 苏瑞兵 ¥188.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取 ...

  7. 主线剧情03-NXP-i.MX系列的u-boot移植基础详解

    u-boot 移植基础详解 本文系广泛撷取.借鉴和整理(相关的内容在网络上有很多,但很多相互抄,或者是版本太老,或者就是不通用的非常有平台针对性的步骤,碎片化泛滥,甚至就是有待分拣的垃圾厂,当然也有一 ...

  8. mhdd应用详解-入门篇(图文教程)

    mhdd应用详解-入门篇(图文教程) 来源:wxiu.com 作者:fox 时间:2009-03-13 点击: 54 对于专业的 电脑维修人员来说, MHDD是必备的硬盘工具,但是技术人员一般只拿他 ...

  9. BIOS设置基础详解

    BIOS设置基础详解AMI BIOS设置 开机显卡自检测完成后,点击<DEL键>即可进入AMI BIOS SETUP设置界面主菜单. 进入了AMI BIOS NEW SETUP UTILI ...

  10. 三大快充技术详解 怎样才能发挥最大功效?

    三大快充技术详解 怎样才能发挥最大功效? 2016-08-23 10:38 在锂电池技术处于瓶颈时期,快充技术在近一年内快速普及,不光是旗舰机中采用了该技术,甚至在千元入门机内也可以看到,你要没个快充 ...

最新文章

  1. Linux下用C获取当前系统时间
  2. JAVA card 应用开发(二) 在项目添加APPLET
  3. linux DNS辅域
  4. Swift—初始 (1)
  5. rust 面向对象之Struct、impl、trait关键字使用
  6. ConcurrentHashMap的源码分析-resizeStamp
  7. 01.elasticsearch-security_es鉴权机制
  8. Linux下载_Linux系统各种版本ISO镜像下载(redhat,centos,oracle,ubuntu,openSUSE)
  9. spring boot: 支持jsp,支持freemarker
  10. 结对项目---万年历
  11. VMware下linux ubuntu 虚拟机复制粘贴-宿主机
  12. 计算机设计大赛感言,平面设计大赛获奖感言
  13. MATLAB颜色的使用
  14. mathcontext保留2位小数_Java BigDecimal subtract()用法及代码示例
  15. 优势比(Odds Ratios)
  16. 透明小时钟开发流程与总结
  17. 交换机的主要技术指标
  18. python毫秒级别抢购_Python 实现毫秒级淘宝抢购脚本
  19. 单电源运放全波整流电路
  20. 计算机u盘驱动坏了如何的修复,U盘损坏五种常见问题的修复方式

热门文章

  1. 数字后端基本技能之:绕线Congestion怎么解?
  2. 复旦美女学霸张安琪的五个“神迹”和背后的真实故事
  3. 郁亮的“权力游戏”,万科的“内外战争”
  4. lisp6 暖通cad_浩辰CAD暖通2018
  5. vue中用js将json数据按英文字母顺序进行排序
  6. WinRAR 破解注册
  7. 【每日新闻】倪光南:“中国芯”切勿重硬轻软;美国研发出可直接在皮肤上打印的3D打印技术...
  8. Canonical 在 Linux 上提供 Flutter 桌面应用支持
  9. 联想E431 win10+Unbutun+Deepin系统安装
  10. 希尔伯特的23个问题