P1177 【模板】快速排序
题目描述
利用快速排序算法将读入的NN个数从小到大排序后输出。
快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)
输入输出格式
输入格式:
第1行为一个正整数N,第2行包含N个空格隔开的正整数ai
,为你需要进行排序的数,数据保证了Ai 不超过1000000000
输出格式:
将给定的N个数从小到大输出,数之间空格隔开,行末换行且无空格。
#include<iostream>
#include<stdio.h>
using namespace std;
int a[100005];
void mysort(int i,int j){
int m,n,temp;
int k;
m=i;
n=j;
k=a[(i+j)/2];
while(m<=n){
while(m<=n&&a[m]<k)//如果k左边的小于k m就往后指
++m;
while(n>=m&&a[n]>k)//如果k右边的大于k n就往前指
--n;
if(m<=n){ //否则 m<=n时就交换
temp=a[m];
a[m]=a[n];
a[n]=temp;
m++; //交换之后m向后指一位,n向前指一位 防止陷入死循环
n--;
}
}
if(m<j) //递归
mysort(m,j);
if(n>i)
mysort(i,n);
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
mysort(0,n-1);
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}
作者:徐小宝
注 :本博客属于中国石油大学胜利学院ACM协会所有!