当前位置: 首页 > news >正文

重温快速排序(r4笔记第73天)

说起排序,总是会想起大名鼎鼎的快速排序,等自己再次翻开快速排序时,感觉是很陌生的,从这个对比也能看出自己确实是已经忘记了曾经重要的日子。快速排序使用了分治思想,分而治之。为了达到它传说中较低的时间度,接受了来自大家多年的挑战还依然是名副其实的快速排序。一个简单的例子就是通过简单的实例来说明。我们假设一组数字如下:6,9,4,1,8,7,2,3,5我们假设以第一个数为参考,即temp为6,两边的数分别为i,j,从这组数的两边来比较这个中间变量,不断的移动下标,从右边开始寻找比temp小的数,从左边开始和寻找比temp大的数。在这个例子中就是以8为基本的参考,分别从这组数的右边,左边开始移动下标,寻找分别是小于6,大于6的节点。需要经过这么几轮的比较。第一轮,我们发现右边第一个节点5<6,就是它了,从左边开始,节点9>6,需要对这个两个节点进行对调。6,9,4,1,8,7,2,3,5变为6,5,4,1,8,7,2,3,96,5,4,1,8,7,2,3,96,5,4,1,3,7,2,8,96,5,4,1,3,7,2,8,96,5,4,1,3,2,7,8,96,5,4,1,3,2,7,8,92,5,4,1,3,6,7,8,95,4,1,31,4,5,31,2, 4,5,3 继续比较,拆分得到最后的结果。

  1. void quicksort(int left,int right)

  2. {

  3. int i,j,t,temp;

  4. if(left>right)

  5. return;

  6. temp=a[left]; //temp中就是基准数,取第一个数

  7. i=left;

  8. j=right;

  9. while(i!=j)

  10. {

  11. //顺序很重要,要先从右边开始找

  12. while(a[j]>=temp && i<j)

  13. j--;

  14. //再找左边的

  15. while(a[i]<=temp && i<j)

  16. i++;

  17. //交换两个数在数组中的位置

  18. if(i<j)

  19. {

  20. t=a[i];

  21. a[i]=a[j];

  22. a[j]=t;

  23. }

  24. }

  25. //最后分拆,得到两组数,对基准书进行重新初始化

  26. a[left]=a[i];

  27. a[i]=temp;

  28. quicksort(left,i-1);//处理左边的

  29. quicksort(i+1,right);//处理右边的

  30. }

相关文章:

  • 海量数据迁移之sqlldr和datapump的缺点分析(r4笔记第74天)
  • mongoDB初探第一篇(r4笔记第75天)
  • 通过单例模式模拟RAC连接 (r4笔记第76天)
  • 特殊的物化视图刷新 (r4笔记第77天)
  • 总结nmon的诸多优点 (r4笔记第78天)
  • 不要成为技术的奴隶(二) (r4笔记第79天)
  • 清华梦的粉碎读后感--论理想主义者王垠(r4笔记第80天)
  • 浅谈Hadoop (r4笔记第81天)
  • MongoDB初探第二篇 (r4笔记第82天)
  • 大话UML中类之间的关系 (r4笔记第83天)
  • 关于Oracle的技术问答 (r4笔记第85天)
  • 【非原创】完全用Linux工作(下)(r4笔记第86天)
  • 【非原创】完全用Linux工作(上)(r4笔记第86天)
  • 一条delete语句的调优(r4笔记第86天)
  • 【非本人原创】突然35岁:捡点我的职业生涯(下)(r4笔记第87天)
  • 2017-09-12 前端日报
  • android图片蒙层
  • AngularJS指令开发(1)——参数详解
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Babel配置的不完全指南
  • Java超时控制的实现
  • Puppeteer:浏览器控制器
  • vue-cli在webpack的配置文件探究
  • 基于axios的vue插件,让http请求更简单
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 深度学习入门:10门免费线上课程推荐
  • 算法-图和图算法
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • !!Dom4j 学习笔记
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #QT(智能家居界面-界面切换)
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (Git) gitignore基础使用
  • (solr系列:一)使用tomcat部署solr服务
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (五)MySQL的备份及恢复
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET Framework杂记
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • 。Net下Windows服务程序开发疑惑
  • @Autowired标签与 @Resource标签 的区别
  • @font-face 用字体画图标
  • @WebService和@WebMethod注解的用法
  • [100天算法】-二叉树剪枝(day 48)
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [Android]常见的数据传递方式
  • [BUUCTF 2018]Online Tool
  • [bzoj1038][ZJOI2008]瞭望塔
  • [bzoj2957]楼房重建