快排是一种不稳定的排序算法,但其平均时间复杂度是(O(nlog_2n)),最坏情况为(O(n^2)),所以该排序方法被认为是目前最好的一种内部排序方法。
话说(sort)不香吗
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
inline void read(int &x){
int f=1;
char ch=getchar();
x=0;
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
x*=f;
}
int n;
int a[100001];
inline void quick_sort(int l,int r){
int i=l,j=r;
int mid=a[(l+r)/2]; //取中间数为基准数
do{
while(a[i]<mid) i++; //找左半部分比mid小的数
while(a[j]>mid) j--; //找右半部分比mid大的数
if(i<=j){ //如果有一组不符合要求
swap(a[i],a[j]); //交换
i++,j--;
}
}while(i<=j); //"="
if(l<j) quick_sort(l,j); //搜索左半部分
if(i<r) quick_sort(i,r); //搜索右半部分
}
int main(){
read(n);
for(int i=1;i<=n;i++) read(a[i]);
quick_sort(1,n);
for(int i=1;i<=n;i++) printf("%d ",a[i]);
return 0;
}