快速排序:它是迄今为止所有排序算法中速度最快的一种。基本思想是:任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分为左右两个子序列,左序列元素的排序码均小于或等于基准元素的排序码,右序列元素的排序码均大于于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。最坏情况下,即每次划分,只得到一个序列,时间效率为O(N2)。
#include<stdio.h>
#define N 10
void qusort(int s[],int start,int end);
void qusort(int s[],int start,int end)
{
int i,j;
i=start;
j=end;
s[0]=s[start]; //设定基准值
while(i<j)
{
while(i<j&&s[0]<s[j])
{
j--; //位置左移
}
if(i<j)
{
s[i]=s[j];
i++; //位置右移
}
while(i<j&&s[i]<=s[0])
{
i++; //位置左移
}
if(i<j)
{
s[j]=s[i]; //将大于基准值的是s[j]放到s[i]位置
j--; //位置左移
}
}
s[i]=s[0]; //将基准值放到指定位置
if(start<i)
qusort(s,start,j-1); //对分割的部分进行递归
if(i<end)
qusort(s,j+1,end);
}
int main()
{
int a[N+1],i;
printf("请输入10个数:\n");
for(i=1;i<=N;i++)
scanf("%d",&a[i]);
printf("这10数的顺序是:\n");
for(i=1;i<=N;i++)
printf("%5d",a[i]);
printf("\n");
qusort(a,1,N);
for(i=1;i<=N;i++)
printf("%5d",a[i]);
return 0;
}