快速排序法是一种经常提及,被很多公司喜欢用来考察的排序方法,它的平均时间复杂度为O(nlongn),最差时间复杂度为O(n*n)。
/* Note:Your choice is C IDE */
#include "stdio.h"
void quick_sort(int a[],int n);//函数的声明后要加分号
int main()
{
int i;
int a[10];
printf("please input 10 datas:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
quick_sort(a,10);
printf("10 datas after sort:\n");
for(i=0;i<10;i++)
printf("a[%d]=%d\n",i,a[i]);
return 0;
}
void quick_sort(int a[],int n)
{
int temp;
int i=0;
int j=n-1;
if(n==1)//递归结束的条件
return ;
else
{
while(i<j)
{
while(a[j]>a[i])//从右向左遍历排序
j--;
if(i<j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
}
while(a[j]>a[i])//从左向右遍历排序
i++;
if(i<j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
j--;
}
}
//此时i==j,标杆元素左边都是比其小的数,右边全是比它大的数.第一步完成
quick_sort(a,i);//第二步,对标杆元素左边的数列使用快速排序
quick_sort(a+i+1,n-i-1);//第三步,对标杆元素右边的数列使用快速排序
}
}