前面排序方法有个很明显的bug就是递归次数很多,而且递归进去的时候什么也不干。这样非常浪费CPU资源,所以呢,现在说说另外一种快速排序的方法,这种方法和前面的不同,前面的方法是K值分别和大于它的值和小于它的值进行交换,这样也就是说,如果发生交换操作,那么只能够是一个大于的值或者一个小于的值。但是现在的方法就是如果发生交换,那么将会是大于值和小于值同时进行交换,就是两两交换。代码如下:

void fastSort2(int *p, int start, int end)
{if ((start == end) || (end -1 < 0))return;int i = start;int j = end -1 ;int k = p[end];    //Kint temp = 0;while (i < j){while (i < j && p[i] <= k){i++;}while (i<j && p[j] >= k){j--;}//条件满足temp = p[i];p[i] = p[j];p[j] = temp;}//交换中间的值if (k < p[j]){temp = p[j];p[j] = k;p[end] = temp;}fastSort2(p, start, ((j - 1) > start) ? (j - 1) : start);fastSort2(p, ((j + 1) < end) ? (j + 1) : end  , end );}

如下:下面就是中间的大小值交换步骤,也就是这里的交换操作是不需要K值进行干涩的,只是需要K值参与判断操作。

比如下面数列,当前K值是5,现在i和j分别是0,3

6 1 4 2 5

那么6将会和2进行交换。

 while (i < j){while (i < j && p[i] <= k){i++;}while (i<j && p[j] >= k){j--;}//条件满足temp = p[i];p[i] = p[j];p[j] = temp;}

当我们把中间的值交换的差不多了,也就是达到我们循环退出条件的时候

while (i < j)

我们就推出去,需要进行交换K值判断,如下:

 //交换中间的值if (k < p[j]){temp = p[j];p[j] = k;p[end] = temp;}

这里有个条件就是k值小于p[j]的时候,我们就需要进行判断,当然k大于p[j]的时候,我们就没有那个必要进行交换了。如果交换了,后期将会出现问题。

下面我们看看调试动画:

好了,大概就是上面说的那样。

算法精解----快速排序2相关推荐

  1. JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)

    转载自   JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法) 引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法, ...

  2. JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)

    转载自  JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法) 相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑 ...

  3. JVM内存管理------GC算法精解(复制算法与标记/整理算法)

    转载自  JVM内存管理------GC算法精解(复制算法与标记/整理算法) 本次LZ和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一章在讲解标记/清除算法时已经提到过,这两种算法都是在此 ...

  4. js排序算法详解-快速排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-快速排序 既然是快速排序,那顾名思义一定很快,快的连小编都被懵逼了好几圈!建议先不要看动图,先看第一种写法: ...

  5. 资料 | O‘Reilly精品图书系列:算法精解 C 语言描述 (简体中文)

    下载地址:资料 | O'Reilly精品图书系列:算法精解 C 语言描述 (简体中文) 内容简介 · · · · · · 本书是数据结构和算法领域的经典之作,十余年来,畅销不衰! 全书共分为三部分:第 ...

  6. 算法精解 c语言描述 豆瓣,斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂!...

    原标题:斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂! "算法会扩展并提高大家的编程技巧,而学习基本的算法设计范式,可以和许多不同领域的不同问题密切相关,还能作为预测算法 ...

  7. 《 算法精解:c语言描述》chm 电子书下载

    本电子书包括基本算法分析原理,基本数据结构.抽象数据结构.递归和树等数据结构知识,选择排序.插入排序.冒泡排序.希尔排序.快速排序方法.归并和归并排序方法.优先队列与堆排序方法.基数排序方法以及特殊用 ...

  8. opencv python书籍_OpenCV算法精解:基于Python与C++

    目录 1 OpenCV入门 1.1 初识OpenCV 1.1.1 OpenCV的模块简介 1.1.2 OpenCV 2.4.13与3.2版本的区别 1.2 部署OpenCV 1.2.1 在Visual ...

  9. 算法精解:DAG有向无环图

    DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...

  10. java标志清理_JVM内存管理之GC算法精解(五分钟让你彻底明白标记/清除算法)...

    相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...

最新文章

  1. #np.random.normal,产生制定分布的数集(默认是标准正态分布)
  2. 使用和制作patch文件
  3. (转)在Eclipse中创建Maven多模块工程
  4. 【C/C++】运算结果出现1.#Q0问题分析
  5. 基于用户评价的评分模型
  6. c# 命名空间命名规范_C#命名空间能力问题和解答 套装2
  7. 玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息...
  8. php爬虫js解析,Spider抓取动态内容(JavaScript指向的页面)
  9. python中sys模块是什么意思_python之sys模块详解
  10. BZOJ 2734: [HNOI2012]集合选数( 状压dp )
  11. 基于离线策略的强化学习(PPO)
  12. Java集合框架面试题总结及解析
  13. 网格划分——Mesh操作
  14. java摄氏度转华氏度 在控制台输入
  15. 十行 Python 代码就提取了韦小宝的身份证信息
  16. C语言代码行数分类统计小程序(源代码)
  17. 中科院、华为等提出Vision GNN,只使用图神经网络进行视觉任务
  18. Java根据子节点获取最上层节点(根节点)数据和所有上级集合
  19. 隐藏在PPT中的后现代主义印象派作品
  20. HDU 1488(Flavius Josephus Reloaded)

热门文章

  1. 让代码更美:10大编程字体
  2. lora三层服务器协议,LoRa以及LoRa包含的几种协议
  3. 演化博弈及Python实现
  4. 【已解决】戴尔笔记本电脑的卡顿问题.
  5. Perl脚本 — 数字IC验证
  6. AWVS13批量脚本
  7. LEDE独臂路由器无法上网踩坑
  8. 主流GPS方案供应商大盘点
  9. JSP程序设计第二版--附带实验代码
  10. 马尔可夫过程及其例题分析