【啊哈!算法】算法3:最常用的排序——快速排序
方法其实很简单:分别从初始序列“6 1 2 7 9 3 4 5 10 8”两端开始“探测”。先从右往左找一个小于6的数,再从左往右找一个大于6的数,然后交换他们。这里可以用两个变量i和j,分别指向序列最左边和最右边。我们为这两个变量起个好听的名字“哨兵i”和“哨兵j”。刚开始的时候让哨兵i指向序列的最左边(即i=1),指向数字6。让哨兵j指向序列的最右边(即j=10),指向数字8。
![](http://www.ahalei.com/data/attachment/forum/201402/26/094811yilrz1tkzkvlrriz.png)
![](http://www.ahalei.com/data/attachment/forum/201402/26/095430axy0qkhxxkktkktk.png)
![](http://www.ahalei.com/data/attachment/forum/201402/26/095437kdandfxhbtokk2qh.png)
现在交换哨兵i和哨兵j所指向的元素的值。交换之后的序列如下。
![](http://www.ahalei.com/data/attachment/forum/201402/26/095448k1kevwlz41373e7k.png)
![](http://www.ahalei.com/data/attachment/forum/201402/26/095458ejza15wscjv7iw5c.png)
![](http://www.ahalei.com/data/attachment/forum/201402/26/095506uz7e1uuukcblhkxv.png)
![](http://www.ahalei.com/data/attachment/forum/201402/26/095514cag5fumuqqg5jnsw.png)
![](http://www.ahalei.com/data/attachment/forum/201402/26/095530e0jf6p0y6aaaw2ir.png)
- #include <stdio.h>
- int a[101],n;//定义全局变量,这两个变量需要在子函数中使用
- void quicksort(int left,int right)
- {
- int i,j,t,temp;
- if(left>right)
- return;
- temp=a[left]; //temp中存的就是基准数
- i=left;
- j=right;
- while(i!=j)
- {
- //顺序很重要,要先从右边开始找
- while(a[j]>=temp && i<j)
- j--;
- //再找右边的
- while(a[i]<=temp && i<j)
- i++;
- //交换两个数在数组中的位置
- if(i<j)
- {
- t=a[i];
- a[i]=a[j];
- a[j]=t;
- }
- }
- //最终将基准数归位
- a[left]=a[i];
- a[i]=temp;
- quicksort(left,i-1);//继续处理左边的,这里是一个递归的过程
- quicksort(i+1,right);//继续处理右边的 ,这里是一个递归的过程
- }
- int main()
- {
- int i,j,t;
- //读入数据
- scanf("%d",&n);
- for(i=1;i<=n;i++)
- scanf("%d",&a[i]);
- quicksort(1,n); //快速排序调用
- //输出排序后的结果
- for(i=1;i<=n;i++)
- printf("%d ",a[i]);
- getchar();getchar();
- return 0;
- }
复制代码
- 10
- 6 1 2 7 9 3 4 5 10 8
复制代码
- 1 2 3 4 5 6 7 8 9 10
复制代码
- 6 1 2 7 9 3 4 5 10 8
- 3 1 2 5 4 6 9 7 10 8
- 2 1 3 5 4 6 9 7 10 8
- 1 2 3 5 4 6 9 7 10 8
- 1 2 3 5 4 6 9 7 10 8
- 1 2 3 4 5 6 9 7 10 8
- 1 2 3 4 5 6 9 7 10 8
- 1 2 3 4 5 6 8 7 9 10
- 1 2 3 4 5 6 7 8 9 10
- 1 2 3 4 5 6 7 8 9 10
- 1 2 3 4 5 6 7 8 9 10
复制代码
【一周一算法】算法3:最常用的排序——快速排序
http://bbs.ahalei.com/thread-4419-1-1.html(出处: 啊哈磊_编程从这里起步)
【啊哈!算法】算法3:最常用的排序——快速排序相关推荐
- 最常用的排序---快速排序法
最常用的排序-快速排序法 桶排序浪费空间,冒泡排序虽然解决了空间问题却在算法的执行效率上牺牲了很多,因此我们的快速排序法就诞生了,是不是听这个名字就很高档呢? 假设现在需要对"6,1,2,7 ...
- 【算法基础笔记】常用的排序算法的时间、空间复杂度,部分排序算法原理
冒泡排序 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上的步骤,除了 ...
- 推荐常用的排序学习算法——BPR(贝叶斯个性化排序)
文章目录 1. 排序学习 1.1 优势 1.2 排序学习在推荐领域的作用 1.3 排序学习设计思路 1.3.1 单点法(Pointwise) 1.3.2 配对法(Pairwise) 1.3.3 列表法 ...
- 排序算法(二)—— 选择法排序算法
1.选择法排序简介 选择法排序算法是一种常用的排序算法,他的实现方法是遍历数组所有元素,找出最小的元素,将它与第一个元素交换:然后遍历剩下的元素,找出最小的元素并与第二个元素交换:接下来再遍历剩下的元 ...
- 常用的排序算法的时间复杂度和空间复杂度
常用的排序算法的时间复杂度和空间复杂度 1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出 ...
- 视觉直观感受7种常用的排序算法
1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...
- STL常用的排序算法
常用的排序算法 merge() sort() random_shuffle() reverse() merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个 ...
- 常用的排序算法的时间复杂度和空间复杂度 .
常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 O(n2) O(n*log2n) 不稳定 ...
- 算法基础:常用的排序算法知识笔记
1.算法外排序分类 2.冒泡排序 冒泡排序(Bubble Sort)属于交换排序,它的原理是:循环两两比较相邻的记录,如果反序则交换,直到没有反序的记录为止. 实现算法: /** * 冒泡排序优化后的 ...
最新文章
- Xcode 5 Error CertUIFramework.axbundle
- fig r函数_R语言基础绘图函数散点图~跟着Nature Communications学画图~Figure1
- Android安全开发之浅谈密钥硬编码
- 如何使用GZip和Jersey压缩Java REST API中的响应
- Memcached 一致性哈希算法PHP实现
- UWP 手绘视频创作工具技术分享系列 - 位图的绘制
- H264参数SPS(序列参数集)和PPS(图像参数集)说明
- 把DataTable转换为泛型ListT或是JSON
- 线性代数及其应用(第三版)5.1节习题解答
- notepad 怎么配置编译c语言,Notepad++ 配置c/c++编译环境
- 共享OrCAD9.2pSpice9.2+multisim下载地址
- Nginx跨域配置--端口转发
- matlab做图片提取骨架,图片骨架提取
- 人这一辈子,渡你的只有两个人
- [Servlet] HttpServletRequest
- 通过简单的类和接口实现手机套餐办理服务
- Kotlin学习(4):编码规范
- [Step By Step]SAP HANA中创建分析视图(Analytic View)
- Axure+RP+pro教程
- SQL之一种通用的连续性问题处理方法【重分组算法】--HiveSQL面试题33
热门文章
- 贺阳外国语学校小学部校长赋长诗:寄情贺阳的风
- mysql中拼音排序的方法_mysql的中文数据按拼音排序的2个方法
- python中的yield是什么意思_python yield什么意思,_Python_ 少侠科技
- 汽车平顺性与仿真分析matlab,基于MATLAB的汽车平顺性的建模与仿真
- Spring基本概念
- 小米mix2手机MIUI10系统降级为MIUI9
- 五星级酒店客房无线网络覆盖WOC方案及施工图片
- 磁卡YD-606的读写
- 幼儿园计算机游戏,幼儿园游戏活动教案10篇
- 分享58个ASP.NET留言聊天源码,总有一款适合您