博客
关于我
快速排序-超级详细代码注释!
阅读量:551 次
发布时间:2019-03-09

本文共 1752 字,大约阅读时间需要 5 分钟。

Description

给定N(N≤10^5)个整数,要求用快速排序对数据进行升序排列,注意不得使用STL。

Input

输入数据第一行给出正整数N(≤10^5),随后给出N个整数,数字间以空格分隔。

Output

输出排序后的结果,数字间以一个空格间隔,行末不得有多余空格。

Sample

Input 849 38 65 97 76 13 27 49
Output 13 27 38 49 49 65 76 97
#include 
#include
#include
#include
#include
using namespace std;int a[100001];void qst(int a[],int l,int r){ //key随便定义吗? //答:定义一个变量,规定第一个值为标杆值,当然此值一般可以随便选择。 int key=a[l]; //为什么用i和j? //答:来确定新的右边界和左边界,传进来的l和r是下次递归调用的左边界,和右边界,所以不能直接用l,和r参与循环。(可以看最后递归的两句)。 int i=l,j=r; //为什么边界是l>r? //l,和r是对本次递归来说的,传进来的参数是l和r,传进来的相等就代表已经不可再分一半递归了。 if(l>=r) { return; } //外层大循环什么意思? //利用i和j,来确定此次循环从左边i开始进行i++,和右边j同时开始j--,保证最后全部移动完毕 while(i
=key,就说明右边的这个值,是大于标杆的,已经在右边了,不用把他移动。 //为什么还要保证i
=key) { j--;} //为什么是 a[i]=a[j],不是a[j]=a[i]? //当上面的循环不满足时,代表需要移动,把a[i]=a[j],不会造成覆盖问题丢失被赋值的数,因为a[i]已经被key保存下来,循环结束,会把key放到i==j的中间位置。 a[i]=a[j]; while(i
<=key)//同上 i++; a[j]=a[i]; } a[i]=key;//中间位置是没有值的,把key值放到中间,标杆就到了中间? qst(a,l,i-1);//连续递归调用函数,左边界为传进来的,右边界是我们用i,j刚确定的。 qst(a,i+1,r);}int main(){ int n; cin>>n; for(int i=1; i<=n; i++) { scanf("%d",&a[i]); } qst(a,1,n); for(int i=1; i<=n; i++) { printf("%d ",a[i]); } return 0;}

去注释版

#include 
#include
#include
#include
#include
using namespace std;int a[100001];void qst(int a[],int l,int r){ int key=a[l]; int i=l,j=r; if(l>=r) { return; } while(i
=key) { j--;} a[i]=a[j]; while(i
<=key)//同上 i++; a[j]=a[i]; } a[i]=key; qst(a,l,i-1); qst(a,i+1,r);}int main(){ int n; cin>>n; for(int i=1; i<=n; i++) { scanf("%d",&a[i]); } qst(a,1,n); for(int i=1; i<=n; i++) { printf("%d ",a[i]); } return 0;}

转载地址:http://lpzsz.baihongyu.com/

你可能感兴趣的文章
MySQL 中开启二进制日志(Binlog)
查看>>
MySQL 中文问题
查看>>
MySQL 中日志的面试题总结
查看>>
mysql 中的all,5分钟了解MySQL5.7中union all用法的黑科技
查看>>
MySQL 中的外键检查设置:SET FOREIGN_KEY_CHECKS = 1
查看>>
Mysql 中的日期时间字符串查询
查看>>
mysql 中索引的问题
查看>>
MySQL 中锁的面试题总结
查看>>
MySQL 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>
mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
查看>>
mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
查看>>
mysql 主从关系切换
查看>>
MYSQL 主从同步文档的大坑
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>
Mysql 事务知识点与优化建议
查看>>
Mysql 优化 or
查看>>
mysql 优化器 key_mysql – 选择*和查询优化器
查看>>