关于快速排序的文章很多,讲的也很明白,大致是用分治方法,先找一个基准数,然后双向扫描,把大于基准数的放右边,小于基准数的放左边,最后插入基准数,然后左右两边分别进行上述方法,直到最后一个数,结束排序。
最坏时间O(n2),平均复杂度O(nlgn).
其中一种代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void QuickSort(int arry[],int left,int right)
{
int i,j,temp,t;
if(left>right) return;
temp=arry[left];//基准数
i=left;
j=right;
while(i!=j)
{
while(arry[j]>=temp && i<j) j--;
while(arry[i]<=temp && i<j) i++;
if(i<j)
{
t=arry[i];
arry[i]=arry[j];
arry[j]=t;
}
}
arry[left]=arry[i];
arry[i]=temp;//中间数与基数交换 基数插入中间
QuickSort(arry,i+1,right);
QuickSort(arry,left,i-1);
}
int main()
{
int n,arry[101];
int i;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&arry[i]);
QuickSort(arry,0,n-1);
for(i=0;i<n;i++)
if(i==n-1) printf("%d\n",arry[i]);
else printf("%d ",arry[i]);
}
return 0;
}