题目
描述
输入N以及N个数(1≤N≤1000),从小到大排序后输出。
输入描述
第一行一个正整数N。
第二行N个空格分隔的整数,这些整数在0~1000之间。
输出描述
输出一行若干个用空格分隔的整数。
样例输入
10
4 5 8 9 1 4 8 3 2 8
样例输出
1 2 3 4 4 5 8 8 8 9
代码
附带注释
#include<bits/stdc++.h>
using namespace std;
int n,a[1001];
void quick_sort(int L,int R){//对a[L]~a[R]范围内进行排序
if(L>=R){//递归出口
return;
}
swap(a[L],a[rand()%(R-L+1)+L]);
int i=L,j=R;//基准值是a[L]
while(i<j){
while(a[i]<=a[j]){
j--;//基准值在a[i]
}
if(i<j){//if可写可不写
swap(a[i],a[j]);//基准值被换到了a[j]
}
while(i<j&&a[i]<=a[j]){
i++;//基准值在a[j]
}
if(i<j){//if可写可不写
swap(a[i],a[j]);//基准值被换到了a[i]
}
}
quick_sort(L,i-1);
quick_sort(i+1,R);
}
int main(){
srand(time(0));
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
quick_sort(0,n-1);//从a[0]开始,至a[n-1]结束
for(int i=0;i<n;i++){
cout<<a[i]<<' ';
}
return 0;
}
纯享版
#include<bits/stdc++.h>
using namespace std;
int n,a[1001];
void quick_sort(int L,int R){
if(L>=R){
return;
}
swap(a[L],a[rand()%(R-L+1)+L]);
int i=L,j=R;
while(i<j){
while(a[i]<=a[j]){
j--;
}
if(i<j){
swap(a[i],a[j]);
}
while(i<j&&a[i]<=a[j]){
i++;
}
if(i<j){
swap(a[i],a[j]);
}
}
quick_sort(L,i-1);
quick_sort(i+1,R);
}
int main(){
srand(time(0));
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
quick_sort(0,n-1);
for(int i=0;i<n;i++){
cout<<a[i]<<' ';
}
return 0;
}