快速排序—C语言
/*
*File name:Quicksort
*Author:Fei Yuling Version:1.0 Date:2018.9.10
*Description:对数组元素进行快速排序
*/
/*
*函数名:print
*作用:打印数组
*参数:len-数组长度,arr-数组
*返回值:无
*/
void print(int len,int arr[])
{
if(len>0)
{
int i;
for(i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
else if(len=0) printf("数组为空\n");
else printf("数组错误\n");
}
/*
*函数名:swap
*作用:交换两个数的值
*参数:*a,*b-要交换的两个数
*返回值:无
*/
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
/*
*函数名:sort
*作用:快速排序
*参数:arr-待排数组,begin-第一个元素,end-最后一个元素
*返回值:无
*/
void sort(int arr[], int begin, int end)
{
int i,j;
if(begin<end)
{
i=begin+1;//每次第一个数字为基准,从基准后一个数字作为开头
j=end;//最后一个数字为结尾
while(i<j)//当i=j时跳出循环
{
if(arr[i]>arr[begin]) //从开头依次与基准比较,比基准大就与j交换
{
swap(&arr[i],&arr[j]);
j--;//交换后j前移
}
else
{
i++;//否则i后移,比较下一个
}
}
/*此时i=j*/
if(arr[i] >= arr[begin]) //当最终停留的数字大于等于基准时,i前移,即此数在枢纽之后
{
i--;
}
swap(&arr[begin], &arr[i]);//将基准放在枢纽位置
sort(arr,begin,i);//递归
sort(arr,j,end);
}
}
int main()
{
int n,i;
int arr[MAX];
printf("请输入待排序列数字个数(不超过20个):");
scanf("%d",&n);
printf("请输入待排序列:");
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
sort(arr,0,n-1);
printf("快速排序后的数组为:\n");
print(n,arr);
return 0;
}