#include<bits/stdc++.h>
using namespace std;
int n,m[2000000],t[2000000];
void qsort(int l,int r){
if(l>=r)return;
int pos1=l,pos2=r;
for(int i=l+1;i<r;++i){
if(m[i]<m[l]){
t[pos1]=m[i];
++pos1;
}
else {
t[pos2-1]=m[i];
--pos2;
}
t[pos1]=m[l];
}
for(int i=l;i<r;++i)m[i]=t[i];
qsort(l,pos1);
qsort(pos1+1,r);
}
int main(){
cin>>n;
for(int i=0;i<n;++i)cin>>m[i];
qsort(0,n);
for(int i=0;i<n;++i)cout<<m[i]<<' ';
return 0;
}
快速排序的时间复杂度被期望为O(nlogn),效率大大高于冒泡、选择排序等。
其实现大多采用递归的方式
当数列已经按从小到大的顺序排列后,由于快排采用的是值得分治,这时时间复杂度就会被卡成O(n^2),因此我们可以使用rand()生成的随机数尽量避免着一种情况,仅需要把m[l]换成rand()%(数据范围) 即可