博客
关于我
快速排序-超级详细代码注释!
阅读量: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 Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>
MySQL InnoDB引擎的锁机制详解
查看>>
Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
查看>>
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>