vlambda博客
学习文章列表

数据结构算法模板之快速排序

时间复杂度 O(nlog(n))

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=10010;const int INF=0x3f3f3f3f;int num[maxn];//快速排序//l 左边界,r 右边界//朴素写法void quicksort(int l,int r){ if(l>=r) return; int i=l,j=r,flag=num[l]; while(i<j) { while(i<j&&num[i]<flag) i++; while(i<j&&num[j]>flag) j--; swap(num[i],num[j]); } quicksort(l,i-1); quicksort(i+1,r);}
//优化void quicksort(int l,int r){ int i=l,j=r,flag=num[(l+r)>>1]; while(i<=j) { while(num[i]<flag) i++; while(num[j]>flag) j--; if(i<=j) { swap(num[i],num[j]); i++; j--; } } if(l<j) quicksort(l,j); if(i<r) quicksort(i,r);}
//测试程序及样例int main(){ int n; cin>>n; for(int i=0;i<n;i++) cin>>num[i]; quicksort(0,n-1); for(int i=0;i<n;i++) cout<<num[i]<<" "; cout<<endl;}/*104 6 2 1 0 3 8 5 9 7*/