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>
using namespace std;
int a[100000]; //题目是10的5次方,这个数组一定要范围合适,要不会报错!
void quicksort(int left,int right){
int low=left;
int high=right;
int p=a[low];
int t;
if(low>=high){ //low=high说明 最小的左右两部分已经是一个元素。
return ; //递归要写出口!!!!
}
while(low<high){
while(a[high]>=p&&low<high){
high--;
}
a[low]=a[high];
while(a[low]<=p&&low<high){
low++;
}
a[high]=a[low];
}
a[low]=p;
t=low;
quicksort(left,t-1);
quicksort(t+1,right);
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
quicksort(0,n-1);
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
}