算法精解----快速排序(方式1)
前言:
快速排序工作原理就是先在序列中找到一个基准值,我称为K值。然后小于K的放在K的前面,大于K的放在K的后面。其实我们每操作K一次,就相当于把序列分为两个部分,一部分大于K,一部分小于K,就这样周而复始。我们可以推测出平均的时间复杂度为lgn,为啥这样说呢。但是书本上说的为nlgn,其实他是每次都进行了一次最优值筛选,但是我没有这样做。我是直接选择中间位置的值当做K值。
好了下面是代码,待会儿再对代码进行说明:
void fastSort(int *p, int start, int end)
{// 1.选择第一个数字为K值// 2.比K大的在右边,比K小的在左边// 3.继续上面步骤int i = start;int j = end;int tmp = 0;int k = p[(start + end) / 2];int kPos = (start + end) / 2;if (i == j)return; //可以不计算了while (i != j){//leftwhile (i<kPos){if (p[i] > k){tmp = p[i];p[i] = k;p[kPos] = tmp;kPos = i;}else{i++;}}while (j > kPos){if (p[j] < k){tmp = p[j];p[j] = k;p[kPos] = tmp;kPos = j;}else{j--;}} }//leftfastSort(p, 0, (kPos - 1 >= 0) ? ( kPos - 1 ) : 0 );//rightfastSort(p, (kPos + 1 <= end ) ? (kPos + 1) : end, end);
}
void fastSort(int *p, int start, int end):
*p:需要排序的数列指针
start:序列开始位置
end:序列结束位置
while (i<kPos){if (p[i] > k){tmp = p[i];p[i] = k;p[kPos] = tmp;kPos = i;}else{i++;}}
这部分作用是交换p[i]和k。交换之后,现在kPos已经等于i,所以while(i<kPos)已经过不去了。所以到下面环节:
while (j > kPos){if (p[j] < k){tmp = p[j];p[j] = k;p[kPos] = tmp;kPos = j;}else{j--;}}
现在又进行另外部分交换,交换之后j--,同时kPos和j相同,所以循环不能进行。就这样,交换一次进行另外一次交换。
就这样多次循环之后,直到i==j之后。本次总循环完成。可以进行左边右边排序。
算法精解----快速排序(方式1)相关推荐
- JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)
转载自 JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法) 引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法, ...
- JVM内存管理------GC算法精解(复制算法与标记/整理算法)
转载自 JVM内存管理------GC算法精解(复制算法与标记/整理算法) 本次LZ和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一章在讲解标记/清除算法时已经提到过,这两种算法都是在此 ...
- 资料 | O‘Reilly精品图书系列:算法精解 C 语言描述 (简体中文)
下载地址:资料 | O'Reilly精品图书系列:算法精解 C 语言描述 (简体中文) 内容简介 · · · · · · 本书是数据结构和算法领域的经典之作,十余年来,畅销不衰! 全书共分为三部分:第 ...
- JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)
转载自 JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法) 相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑 ...
- js排序算法详解-快速排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-快速排序 既然是快速排序,那顾名思义一定很快,快的连小编都被懵逼了好几圈!建议先不要看动图,先看第一种写法: ...
- 算法精解 c语言描述 豆瓣,斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂!...
原标题:斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂! "算法会扩展并提高大家的编程技巧,而学习基本的算法设计范式,可以和许多不同领域的不同问题密切相关,还能作为预测算法 ...
- 算法精解:DAG有向无环图
DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...
- 《 算法精解: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 ...
- java标志清理_JVM内存管理之GC算法精解(五分钟让你彻底明白标记/清除算法)...
相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...
最新文章
- 如何限制IP,通过SSH登陆linux服务器
- Java 性能优化系列之3.2[JVM调优] --- JIT即时编译
- golang map 排序 key value
- C# ListView添加DragDrop
- function——函数声明头的提升和预解析
- 前端学习(1905)vue之电商管理系统电商系统之根据用户id查询对应的信息
- STL容器删除元素的陷阱
- FileOutputStreamTest
- Linux下部署LVS(DR)+keepalived+Nginx负载均衡
- 2021年7月文章精选
- c# image转换为bitmap,C# - 转换WPF Image.source到System.Drawing.Bitmap
- 微信小程序开发学习笔记008--微信小程序项目02
- Identity of indiscernibles(不可分与同一性)
- 什么时候建立分区的时候需要建立EFI分区
- PHP8.0尝鲜系列(一):Windows 10安装PHP8.0
- 论火力发电锅炉之改进
- matplotlib画三维图
- 微信小程序css之盒子(box)模型
- littlefs系列:Files
- 解决IIS存储空间不足的问题
热门文章
- STM32使用MCUISP下载程序教程
- 统计学习方法+Python机器学习实践指南+强化学习精要:核心算法与Tensorflow实现+图解深度学习与神经网络从张量到TensorF实现+人工神经网络理论设计及应用+深度卷积网络:原理与实践
- 前端优秀框架jQuery weui推荐
- 2019 双十一京东全民养红包攻略分享
- matlab如何看算法时间,【Matlab实现】动态时间规划调整算法(DTW算法)——计算两个序...
- 线性时间选择——寻找第k小的数
- 谢菲尔德遗传算法工具箱
- 侯捷 - C++ Startup 揭密:C++ 程序的生前和死后 (二)
- 我国会计界计算机软件界大规模研究,初级会计电算化第一章练习.doc
- 国内博客(blog)搬家工具(服务)大全