2413: 【例-普及-】【P1177】快速排序

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:4 解决:4

题目描述

利用快速排序算法将读入的 lns="http://www.w3.org/1998/Math/MathML"> 个数从小到大排序后输出。

快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓。)

输入

第 lns="http://www.w3.org/1998/Math/MathML">1 行为一个正整数 lns="http://www.w3.org/1998/Math/MathML">,第 lns="http://www.w3.org/1998/Math/MathML">2 行包含 lns="http://www.w3.org/1998/Math/MathML"> 个空格隔开的正整数 lns="http://www.w3.org/1998/Math/MathML">,为你需要进行排序的数,数据保证了 lns="http://www.w3.org/1998/Math/MathML"> 不超过 lns="http://www.w3.org/1998/Math/MathML">109

输出

将给定的 lns="http://www.w3.org/1998/Math/MathML"> 个数从小到大输出,数之间空格隔开,行末换行且无空格。

样例输入 复制

5
4 2 4 5 1

样例输出 复制

1 2 4 4 5

提示

对于 lns="http://www.w3.org/1998/Math/MathML">20% 的数据,有 lns="http://www.w3.org/1998/Math/MathML">103

对于 lns="http://www.w3.org/1998/Math/MathML">100% 的数据,有 lns="http://www.w3.org/1998/Math/MathML">105


#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;
}