1 //2012-07-16
 2 void quickSort(element list[], int left, int right)//快速排序
 3 {
 4     int i=left;
 5     int j=right;
 6
 7     if(i >= j) //判断需要i<j
 8         return;
 9
10     element temp=list[i];
11
12     while(i<j)
13     {
14         while(i<j && list[j]>temp)//需要i<j
15             j--;
16
17         list[i]=list[j];
18         i++;
19
20         while(i<j && list[i]<temp)//需要i<j
21             i++;
22
23         list[j]=list[i];
24         j--;
25     }
26
27     list[j+1]=temp;// 运行到此处j j+1 i
28
29     quickSort(list,left,j);
30     quickSort(list,i,right);
31 }
32
33 void quickSort2(element list[], int left, int right)
34 {
35     int i=left;
36     int j=right;
37
38     if(i>=j)
39         return;
40
41     element pivot=list[i];
42     element temp;
43     j++;//以下i++,j--了一次,i是需要首先+1,但j不需要,所以此处需要提前+1,抵消
44
45     do{
46         do{
47             i++;
48         }while( list[i]<pivot);//不需要i<j,便于之后的交换操作和子快速排序
49
50         do{
51             j--;
52         }while(list[j]>pivot);//不需要i<j
53
54         if(i<j)
55         {
56             temp=list[i];
57             list[i]=list[j];
58             list[j]=temp;
59         }
60     }while(i<j);//运行到此处,a[i]>pivot,a[j]<pivot,j=i-1;
61                 //一般情况结束时left...j,i...right  [j]<pivot,[i]>pivot所以交换left和j,
62                 //特殊情况结束时left......right,i=j=right+1//1,2,3,4,5,6,7
63                 //即结束时,i后的都大于pivot,j前的都小于pivot,其中[j]<pivot,[i]>pivot
64     list[left]=list[j];
65     list[j]=pivot;
66
67     quickSort(list,left,j-1);
68     quickSort(list,j+1,right);
69
70 }

下面的是对quickSort方法的修改:

删除了quickSort的18、24行,以及27、29、30进行对应修改。修改之后使得如下代码运行到23行时,i=j,这样思维更清晰。

 1 void quickSort3(element list[], int left, int right)//快速排序,修改时间2012-09-18 16:40:40
 2 {
 3     int i=left;
 4     int j=right;
 5
 6     if(i >= j) //判断需要i<j
 7         return;
 8
 9     element temp=list[i];
10
11     while(i<j)
12     {
13         while(i<j && list[j]>temp)//需要i<j
14             j--;
15
16         list[i]=list[j];
17
18         while(i<j && list[i]<temp)//需要i<j
19             i++;
20
21         list[j]=list[i];
22     }
23     list[i]=temp;// 运行到此处i=j
24
25     quickSort3(list,left,i-1);
26     quickSort3(list,j+1,right);
27 }

转载于:https://www.cnblogs.com/zjhnl/archive/2012/07/16/2593116.html

快速排序(二)最后修改相关推荐

  1. Weblogic二种修改端口的方法(转)

    转自:http://liuzidong.iteye.com/blog/690277 Weblogic二种修改端口的方法 环境:XP3,WebLogic92中文 一 修改配置文件 我的电脑的位置是: E ...

  2. cognos报表制作学习(二)修改原报表

    目录 cognos报表制作学习(二)修改原报表 已经制作完成的报表,如果需求有修改,如何最快地修改原报表呢? 1.修改原报表,添加字段,最后一定要点击保存,否则package里edit查看会没有新加的 ...

  3. 英灵神殿服务器修改器,英灵神殿十二项修改器

    英灵神殿多功能修改器可以改变游戏中多项功能属性,例如无限体力和耐久不减丶木箭不减,英灵神殿十二项修改器非常的实用和方便需要的玩家朋友们可自行下载. 英灵神殿多功能修改器可以改变游戏中多项功能属性,例如 ...

  4. 七日杀16.1 服务器修改器,七日杀三十二项32位修改器_七日杀 a16.1b1多功能三十二项修改器-66街机网...

    资源说明: 七日杀 a16.1b1多功能三十二项修改器32位[潇潇蓝龙],由"潇潇蓝龙"制作,一款全功能修改器,基本上是全能力开关,支持任意调整生物伤害.方块距离.生物距离.体力消 ...

  5. 如何更改linux文件权限设置,linux文件权限学习笔二——如何修改文件权限(chgrp,chown,chmod)...

    linux文件权限学习随笔二--如何修改文件权限 一.修改文件所属组群--chgrp 修改文件所属组群很简单-chgrp命令,就是change group的缩写(我们可以利用这些来记忆命令) 语法:c ...

  6. Postman系列(二)-修改主题和字体大小

    一.修改主题 postman默认的皮肤是白色.白晃晃的,一天工作下来经常看得我头疼.眼睛疼. 现在,每次在工作电脑下载完软件第一件事就是把软件皮肤改成暗黑模式(如果软件支持的话) postman有两种 ...

  7. CyberController手机外挂番外篇:源代码的二次修改

    文章目录 前言 调试过程中的疑问 为什么一段时间不使用CyberController,翻译就无法触发了? 为什么连接成功了,但却依然无法进行语音识别和翻译? 多长时间TCP连接就会挂掉 连接正常与断开 ...

  8. 【3DMax】二维修改器

    挤出修改器 非闭合图形:成面片    可用来判断正反面 图形包含图形: 从外向内数,俩俩一体 闭合包含非闭合,图形见交叉:虽然能生成,但是是错误的 倒角修改器 倒角:类似挤出,可建三层  渲染: 二维 ...

  9. 删除后别人的微信号变成wxid_安卓版微信更新了,微信可以二次修改微信号了?...

    文 / 波哥来源 / 波哥说科技(ID:wanjimao19) 微信,日活十几亿用户,微信支付.微信聊天等功能,这些功能让我们的生活更加便捷! 今天微信也更新了安卓7.0.15版本,上线了一些新功能, ...

  10. 荒野大镖客2 v1.0-v1355.18 十二项修改器

    使用说明: 数字键 1 – 无限生命 数字键 2 – 无限体力 数字键 3 – 无限死亡之眼 数字键 4 – 马:无限生命 数字键 5 – 马:无限体力 数字键 6 – 无限子弹 数字键 7 – 无需 ...

最新文章

  1. 学习 JavaScript (四)核心概念:操作符
  2. python读取word文档
  3. vue 公用页面引用_关于vue全局引用公共的js和公共的组件的折腾
  4. 使用个性化Profile代替Session
  5. hdu 5265(二分+枚举)
  6. [蓝桥杯2018决赛]迷宫与陷阱
  7. c# 拼凑特定格式的报表打印
  8. 【洛谷 P2633】 Count on a tree(主席树,树上差分)
  9. 拉普拉斯算子属于卷积方法吗_二维图像中的Laplace算子和图论中的Laplacian矩阵...
  10. 再看结构体对齐与小端联合问题
  11. 在uniapp中配置并colorui及阿里图标
  12. 【云原生】AI云开发平台——AI Model Foundry介绍(开发者可免费体验AI训练模型)
  13. Ubuntu 复制文件报设备空间不足解决办法
  14. java实现RabbitMQ消息队列
  15. HTML5期末大作业:美食主题网站设计——美食零食官网响应式网页设计(6页) HTML+CSS+JavaScript
  16. 【BZOJ3503】【Cqoi2014】和谐矩阵 高斯消元,解异或方程组
  17. 缩略图无法显示文件名
  18. 英语专业自学python_如何做好英专人? 给迷茫英专生的一些建议
  19. [LINUX]解决Linux下ubuntu 20.04暂时不能解析域名“cn.archive.ubuntu.com”问题
  20. python openpyxl 设置表格列宽的自动适应_Python的openpyxl列宽调整大小

热门文章

  1. 在ASP.NET下实现数字和字符相混合的验证码
  2. 使用strace和ltrace跟踪程序调用
  3. Windows下获取视频设备的一种改进实现
  4. C++11中std::addressof的使用
  5. 【imx6】libipu.so.0说明
  6. 在linux中怎么重置mysql密码_详解如何在Linux(CentOS)下重置MySQL根(Root)密码
  7. php显示服务器文件,php-无法显示从新服务器下载文件的进度(在以前的服务器上工作)...
  8. Java学习总结:41(文件操作类:File)
  9. list @size 验证_第33期:上海自来水来自海上,回文字符串验证!
  10. 【java】兴唐第三十一节课之反射