快速排序是一种分治排序方法,是复杂度为o(n*logn)中排序较快的一种,使用的也很多。
基本思想是这样的:在所有数中选择一个数作为“基准”(一般是第一个或最后一个),然后将比它的大的放在它右分区,比它小的放在它左分区。再在两边重复刚才的操作,直到所有的分区都只剩下一个数,排序结束。
下面是代码的递归实现:
#include<iostream>
using namespace std;
int list[1000];
void quicksort(int i,int j)
{
if(i<j)
{
int f,l,sym;
f=i;
l=j;
sym=list[i]; //基准
while(i<j)
{
while(i<j&&list[j]>=sym)
j--;
if(i<j)
list[i++]=list[j];
while(i<j&&list[i]<sym)
i++;
if(i<j)
list[j--]=list[i];
}
list[i]=sym;
quicksort(f,i-1);
quicksort(i+1,l);
}
}
int main()
{
int n,i,x;
cin>>n;
for(i=1;i<=n;i++)
{ cin>>x;
list[i]=x;
}
quicksort(1,n);
for(i=1;i<n;i++)
cout<<list[i]<<" ";
cout<<list[n]<<endl;
return 0;
}