标准:
快排的时间复杂度O(nlogn)
函数实现:
void quick_sort(int v[],int l,int r)
{
if(l>=r)return ;
int pos=v[(l+r)>>1],i=l-1,j=r+1;
while(i<j)
{
while(v[++i]<pos);
while(v[--j]>pos);
if(i<j)swap(v[i],v[j]);
}
quick_sort(v,l,j);
quick_sort(v,j+1,r);
return ;
}
完整代码:
#include<iostream>
#include<algorithm>
using namespace std;
void quick_sort(int v[],int l,int r);
int main()
{
int n;
scanf("%d",&n);
int a[1000];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
quick_sort(a,0,n-1);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
void quick_sort(int v[],int l,int r)
{
if(l>=r)return ;
int pos=v[(l+r)>>1],i=l-1,j=r+1;
while(i<j)
{
while(v[++i]<pos);
while(v[--j]>pos);
if(i<j)swap(v[i],v[j]);
}
quick_sort(v,l,j);
quick_sort(v,j+1,r);
return ;
}
注意:如果数据的范围如果太大,就必须pos=v[(l+r))>>1] ,选左端点或者右端点的会造成运行的超时,如果数据没有加强可以进行选左右端点,但是基本,洛谷,awing的数据都已经加强了。