前言:

快速排序工作原理就是先在序列中找到一个基准值,我称为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)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 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 ...

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

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

最新文章

  1. 如何限制IP,通过SSH登陆linux服务器
  2. Java 性能优化系列之3.2[JVM调优] --- JIT即时编译
  3. golang map 排序 key value
  4. C# ListView添加DragDrop
  5. function——函数声明头的提升和预解析
  6. 前端学习(1905)vue之电商管理系统电商系统之根据用户id查询对应的信息
  7. STL容器删除元素的陷阱
  8. FileOutputStreamTest
  9. Linux下部署LVS(DR)+keepalived+Nginx负载均衡
  10. 2021年7月文章精选
  11. c# image转换为bitmap,C# - 转换WPF Image.source到System.Drawing.Bitmap
  12. 微信小程序开发学习笔记008--微信小程序项目02
  13. Identity of indiscernibles(不可分与同一性)
  14. 什么时候建立分区的时候需要建立EFI分区
  15. PHP8.0尝鲜系列(一):Windows 10安装PHP8.0
  16. 论火力发电锅炉之改进
  17. matplotlib画三维图
  18. 微信小程序css之盒子(box)模型
  19. littlefs系列:Files
  20. 解决IIS存储空间不足的问题

热门文章

  1. STM32使用MCUISP下载程序教程
  2. 统计学习方法+Python机器学习实践指南+强化学习精要:核心算法与Tensorflow实现+图解深度学习与神经网络从张量到TensorF实现+人工神经网络理论设计及应用+深度卷积网络:原理与实践
  3. 前端优秀框架jQuery weui推荐
  4. 2019 双十一京东全民养红包攻略分享
  5. matlab如何看算法时间,【Matlab实现】动态时间规划调整算法(DTW算法)——计算两个序...
  6. 线性时间选择——寻找第k小的数
  7. 谢菲尔德遗传算法工具箱
  8. 侯捷 - C++ Startup 揭密:C++ 程序的生前和死后 (二)
  9. 我国会计界计算机软件界大规模研究,初级会计电算化第一章练习.doc
  10. 国内博客(blog)搬家工具(服务)大全