算法精解----快速排序2
前面排序方法有个很明显的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相关推荐
- JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)
转载自 JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法) 引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法, ...
- JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)
转载自 JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法) 相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑 ...
- JVM内存管理------GC算法精解(复制算法与标记/整理算法)
转载自 JVM内存管理------GC算法精解(复制算法与标记/整理算法) 本次LZ和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一章在讲解标记/清除算法时已经提到过,这两种算法都是在此 ...
- js排序算法详解-快速排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-快速排序 既然是快速排序,那顾名思义一定很快,快的连小编都被懵逼了好几圈!建议先不要看动图,先看第一种写法: ...
- 资料 | O‘Reilly精品图书系列:算法精解 C 语言描述 (简体中文)
下载地址:资料 | O'Reilly精品图书系列:算法精解 C 语言描述 (简体中文) 内容简介 · · · · · · 本书是数据结构和算法领域的经典之作,十余年来,畅销不衰! 全书共分为三部分:第 ...
- 算法精解 c语言描述 豆瓣,斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂!...
原标题:斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂! "算法会扩展并提高大家的编程技巧,而学习基本的算法设计范式,可以和许多不同领域的不同问题密切相关,还能作为预测算法 ...
- 《 算法精解:c语言描述》chm 电子书下载
本电子书包括基本算法分析原理,基本数据结构.抽象数据结构.递归和树等数据结构知识,选择排序.插入排序.冒泡排序.希尔排序.快速排序方法.归并和归并排序方法.优先队列与堆排序方法.基数排序方法以及特殊用 ...
- 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 ...
- 算法精解:DAG有向无环图
DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...
- java标志清理_JVM内存管理之GC算法精解(五分钟让你彻底明白标记/清除算法)...
相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...
最新文章
- #np.random.normal,产生制定分布的数集(默认是标准正态分布)
- 使用和制作patch文件
- (转)在Eclipse中创建Maven多模块工程
- 【C/C++】运算结果出现1.#Q0问题分析
- 基于用户评价的评分模型
- c# 命名空间命名规范_C#命名空间能力问题和解答 套装2
- 玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息...
- php爬虫js解析,Spider抓取动态内容(JavaScript指向的页面)
- python中sys模块是什么意思_python之sys模块详解
- BZOJ 2734: [HNOI2012]集合选数( 状压dp )
- 基于离线策略的强化学习(PPO)
- Java集合框架面试题总结及解析
- 网格划分——Mesh操作
- java摄氏度转华氏度 在控制台输入
- 十行 Python 代码就提取了韦小宝的身份证信息
- C语言代码行数分类统计小程序(源代码)
- 中科院、华为等提出Vision GNN,只使用图神经网络进行视觉任务
- Java根据子节点获取最上层节点(根节点)数据和所有上级集合
- 隐藏在PPT中的后现代主义印象派作品
- HDU 1488(Flavius Josephus Reloaded)