数据结构算法模板之快速排序
时间复杂度 O(nlog(n))
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;
}
/*
10
4 6 2 1 0 3 8 5 9 7
*/