快速排序
时间复杂度 O(nlogn)
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> using namespace std; const int MAX_A = 1000009; int a[MAX_A]; void Q_sort(int l,int r) { //把l,r分为两部分,左边比key小,右边比key大 int l1=l,r1=r; while(l1<r1) { //以左边第一个即a[l]为枢轴key while(l1<r1&&a[r1]>=a[l]) r1--; while(l1<r1&&a[l1]<=a[l]) l1++; if(l1!=r1) swap(a[l1],a[r1]); else { swap(a[l],a[l1]); Q_sort(l,l1-1); Q_sort(l1+1,r); } } } int main() { int n; while(~scanf("%d",&n)) { for(int i=0; i<n; i++) scanf("%d",&a[i]); Q_sort(0,n-1); for(int i=0; i<n; i++) printf("%d ",a[i]); printf(" "); } }