快速排序
来源:互联网 发布:python 爬虫 url去重 编辑:程序博客网 时间:2024/06/15 01:05
最近刷题过程中经常碰到题中有排序的要求,为了偷懒往往采用c++中STL函数的sort()函数排序,该函数实现方法主要是采用快速排序,时间复杂度一般为O(nlogn),根据排序量和阈值结合了插入排序和堆排序。这里主要是学习快速排序的思想顺便学习代码的实现。
快速排序主要的思想如下:
假设A为待排序数据,i为起始值,j为终值。
1、假如A为空或者只有一个数值,直接返回。
2、就像二分插入排序一样,我们也可以取一个中轴值,设为k,k = A[(i+j)/2];
3、排序过程中要求k的左边全部小于k,k的右边全部大于k。
4、递归第3步。
这里附上一张动态的排序图:
实现代码如下:
void quick(int *a,int i,int j)
{
int m,n,temp;
int k;
m=i;
n=j;
k=a[(i+j)/2]; /*选取的参照*/
do {
while(a[m]<k&&m<j) m++; /* 从左到右找比k大的元素*/
while(a[n]>k&&n>i) n--; /* 从右到左找比k小的元素*/
if(m<=n) { /*若两者没有交叉*/
temp=a[m];
a[m]=a[n];
a[n]=temp;
m++;
n--;
}
}while(m<=n);
if(m<j) quick(a,m,j); /*运用递归*/
if(n>i) quick(a,i,n);
}
若是想了解STL函数中sort()是如何实现,可以参考下面链接:http://www.cnblogs.com/fengcc/p/5256337.html
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- Win10+VS2015+OpenCv3.2.0+OpenCv_contrib3.2.0+CMAKE3.8.1编译OpenCv源代码
- vm虚拟机安装的centos6.8系统下将php5.3.3升级到5.6.3
- 开发H5游戏的附加价值
- 2017ACM-ICPC全国邀请赛(陕西)
- 生活不止眼前的苟且,还有诗和远方的田野
- 快速排序
- LNMP一键安装包
- 软件模块划分(实现与管理)
- SVN A C D M G U R I的含义
- 《lua程序设计》读书笔记 第四章:语句
- 视频质量测试(主客观),讲解视频知识,8K视频技术测试
- (一)配置Linux系统的网络IP地址
- 关于微信小程序登陆的问题
- Entity Framework Core 中使用多个DBContext时要注意