博客
关于我
快速排序-超级详细代码注释!
阅读量: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/

你可能感兴趣的文章
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_使用NIFI表达式语言_来获取自定义属性中的数据_NIFI表达式使用体验---大数据之Nifi工作笔记0024
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_内嵌ZK模式集群2_实际操作搭建NIFI内嵌模式集群---大数据之Nifi工作笔记0016
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_实际操作_03---大数据之Nifi工作笔记0035
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_02---大数据之Nifi工作笔记0034
查看>>