2413: 【例-普及-】【P1177】快速排序
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:4
解决:4
题目描述
利用快速排序算法将读入的 个数从小到大排序后输出。
快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++ 选手请不要试图使用 STL
,虽然你可以使用 sort
一遍过,但是你并没有掌握快速排序算法的精髓。)
输入
第 行为一个正整数 ,第 行包含 个空格隔开的正整数 ,为你需要进行排序的数,数据保证了 不超过 。
输出
将给定的 个数从小到大输出,数之间空格隔开,行末换行且无空格。
样例输入 复制
5
4 2 4 5 1
样例输出 复制
1 2 4 4 5
提示
对于 的数据,有 ;
对于 的数据,有 。
#include<bits/stdc++.h> using namespace std; int a[100010],n; void qsort(int a[],int l,int r) { //引入数组的地址 int i=l,j=r,flag=a[(l+r)/2],tmp; do { while (a[i]<flag) i++; //从左找比哨兵大的数; while (a[j]>flag) j--; //从右找比哨兵小的数; if (i<=j) { //交换 tmp=a[i];a[i]=a[j];a[j]=tmp; i++;j--; } }while (i<=j); if (l<j) qsort(a,l,j); if (i<r) qsort(a,i,r); } int main(){ cin>>n; for (int i=0;i<n;i++) cin>>a[i]; qsort(a,0,n-1); for (int i=0;i<n;i++) cout<<a[i]<<' '; return 0; }