#include <stdio.h>
int qsort(int s[],int start,int end)
//自定义函数 qsort(),start,end为要排序数第一个和最后一个
{
int i,j;
i=start; //将每组首个元素赋给i
j = end; //将每组末尾元素赋给j
s[0]=s[start]; //设置基准值
while(i<j)
{
while(i<j && s[0]<s[j]) //大的放在右边
j--; //位置左移
if(i<j)
{
s[i]=s[j]; //将s[j]放到s[i]的位置上
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)
qsort(s,start,j-1); //对分割出的部分递归调用qusort()函数
if (i<end)
qsort(s,j+1,end);
return 0;
}
int main()
{
int a[3001],i,n,m; //定义数组及变量为基本整型
scanf("%d %d",&n,&m);
for(i=1;i<=n+m;i++) //从数组元素s[1]开始为第一个数,将为输入数值的s[0]作为基准值
scanf("%d",&a[i]); //从键盘中输入要进行排序的数
qsort(a,1,n+m); //调用qsort()函数进行排序
for(i=1;i<=n+m;i++)
printf("%d ",a[i]); //输出排好序的数组
return 0;
}
快速排序c语言代码如上
思路如下
1. 在数组中选一个基准数(通常为数组第一个);
2. 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边;
3. 对于基准数左、右两边的数组