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

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

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

Sample

Input
8
49 38 65 97 76 13 27 49
Output
13 27 38 49 49 65 76 97
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <math.h>
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<j){//下面第一个小循环的作用?//这个循环是让满足条件的快速移动过去-//例如 key=3//序列是3,2,3,1,4,5,2,4,j指向4的时候会满足while,j--,这时候j指向2不满足while,跳出循环。//循环的是哪几句?//答:循环的 { j--;}仅仅这一句,只要满足a[j]>=key,就说明右边的这个值,是大于标杆的,已经在右边了,不用把他移动。//为什么还要保证i<j?//答:因为右边的j如果一直j--,会出错的,所以同时保证i<jwhile(i<j&&a[j]>=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<j&&a[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 <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <math.h>
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<j){while(i<j&&a[j]>=key){ j--;}a[i]=a[j];while(i<j&&a[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;
}

快速排序-超级详细代码注释!相关推荐

  1. uniapp - 通讯聊天功能示例源代码,类似微信聊天 / 电商淘宝京东 “买卖双方“ 消息沟通系统 / 各大应用简易聊天沟通的功能插件(超级详细代码和注释,开箱即用)全端兼容 H5 App 小程序

    前言 网上的教程鱼龙混杂太乱了,并且全都是各种引入关系.各种冗余代码,拿过来后根本无法进行改造. 本文实现了 uniapp 全平台兼容的 "1对1 即时聊天沟通" 的聊天窗口模板, ...

  2. (信贷风控九)行为评分卡模型python实现(详细代码+注释+讲解)

    (九)行为评分卡模型python实现(详细代码+注释+讲解) 浅谈行为评分卡 我们知道行为评分卡只要用在信贷的贷中环节,贷中指的是贷款发放之后到期之前的时间段,其实行为评分卡和申请评分卡在实现上没有太 ...

  3. 详细代码注释1148: 组合三位数之一

    题目描述 48: 组合三位数之一 时间限制: 1 Sec 内存限制: 128 MB 提交: 5197 解决: 3705 把1.2.3.4.5.6.7.8.9组合成3个3位数,要求每个数字仅使用一次,使 ...

  4. 【算法】基于hoare快速排序的三种思想和非递归,基准值选取优化【快速排序的深度剖析-超级详细的注释和解释】你真的完全学会快速排序了吗?

    文章目录 前言 什么是快速排序 快速排序的递归实现 快速排序的非递归实现 单趟排序详解 hoare思想 挖坑法 前后指针法 快速排序的优化 三数取中 小区间优化 快速排序整体代码 尾声 前言 先赞后看 ...

  5. 中正则表达式详解_python :正则表达式/re库 超级详细de注释解释

    首先要解释,什么是正则表达式: 给定一串字符串,我们可以提取他的特征,把他抽象成一个类型. 下次遇到和这个字符串同类的字符串,我们只需要判断是否符合特征,就知道这个字符串是不是同类的. 举个例子: 每 ...

  6. 超级详细的注释C语言简单实现童年小游戏:贪吃蛇

    引言: 记得小时候还没有现在超级高端的智能手机,当时的诺基亚类型的老人机是我的最爱,而里面的贪吃蛇小游戏我总是能玩很久,所以今天就用C语言简单实现一下贪吃蛇这一个小游戏吧. 一. 准备工作: 1.VS ...

  7. Vue - 实现垂直菜单分类栏目,鼠标移入后右侧出现悬浮二级菜单容器效果(完整示例源码,详细代码注释,一键复制开箱即用)

    前言 网上的教程都太乱了,各种杂乱无注释代码.图片资源丢失.一堆样式代码,根本无法改造后应用到自己的项目中. 本文实现了 在 Vue / Nuxt 项目中,垂直分类菜单项,当用户鼠标移入菜单后,右侧自 ...

  8. YOLOv5 史上最详细代码注释 逐行注释 0基础搞懂

    最近将yolov5源码进行解析,为了便于小白进行学习,将源码逐行进行注释,最详细说明.结合注释案例,进一步理解. 源码地址示例来自官方源码: """ Train a YO ...

  9. tensorflow 最小二乘拟合详细代码注释

    #程序 不是我写的,注释是我做的,转载请注明"lg土木设计"#最小二乘法拟合,用y=ax+b a=weight b=biases from __future__ import pr ...

最新文章

  1. 数据结构与算法常用名词术语整理
  2. python制作验证码_Python编写生成验证码的脚本的教程
  3. java 字符串用法_java中字符串的用法
  4. 基于IFC的大型三维城市群体——智慧城市模拟
  5. Redis发布订阅和Stream
  6. 力扣401.二进制手表
  7. hibernate 查询id为空懒加载_hibernate 查询时指定查询字段、级联表的一种方式
  8. Oracle 10g Create Database
  9. 学习数据库系统概念,设计及应用心得
  10. 抛砖引玉——Stagefright漏洞初探
  11. mac本更新chromedriver版本
  12. linux系统用户和普通用户,适合普通Linux用户的五大Linux发行版
  13. 文件储存树的理解(ISAM 和 B+Tree)
  14. 趣图:谁说理工男都穿格子衫?
  15. FL Studio21汉化中文版下载及安装方法FL专业音乐制作软件
  16. 解决火车头采集器无法采集HTTPS的办法
  17. 防止开发人员开发后门程序,数据库安全之应用程序调用的危险
  18. 开源应用程序打包工具
  19. PND Solution(Design House) (China)
  20. AUR 打包自己的软件

热门文章

  1. 5次方用计算机,用科学计算器来求三的五次方的值,按键顺序是( )?
  2. Python Day42
  3. GMQ钱包致力成为您数字资产安全的保护伞
  4. ES6/ES2015核心内容-转载
  5. 使用JAX-WS构建Web Services .
  6. 23个小动作让你记忆力惊人
  7. 内网信息安全厂商对客户的误导
  8. RHEL5 基于虚拟用户验证的VSFTP服务器
  9. ubuntu和windows上pip和windows上conda国内源更新module
  10. posix thread条件变量