快速排序:找一个基准数(一般为第一个数),比它大的放在他左边,比它小的放在它右边,最后使它到它该到的位置,然后利用递归的方式使每个数都到它应该在的位置。
#include<stdio.h>
void qsort(int b[],int left,int right)
{
int key;
if(left<right)
{
int i=left;
int j=right;
int key=b[left];//以数组第一个数据作为关键数据(基准数)
while(i<j)//直到i与j相等时,结束
{
while(i<j&&b[j]>=key)//从后面往前找,直到找到比关键数据小的或者i与j相等就结束
{
j--;
}
if(i<j)//排除掉前面while循环i=j的情况
{b[i]=b[j];i++;}//比关键数据小的放在左边
while(i<j&&b[i]<=key)//从前面往后找,直到找到比关键数大的或者i=j时结束
{
i++;
}
if(i<j)//排除掉前面while循环i=j的情况
{b[j]=b[i];j--;}//比关键数据大的放在右边
}
b[i]=key;//让key到它应该在的位置
qsort(b,left,i-1);//递归调用,使左边的数组排序
qsort(b,i+1,right);//递归调用,使右边的数组排序
}
}
int main()
{
int a[10],n;
printf("输入十个数\n");
for(n=0;n<10;n++)
scanf("%d",&a[n]);
printf("--------排序前----------\n");
for(n=0;n<10;n++)
printf("%d\t",a[n]);
printf("\n");
qsort(a,0,9);
printf("--------排序后---------\n");
for(n=0;n<10;n++)
printf("%d\t",a[n]);
printf("\n");
}