C语言中qsort函数怎么用?

我想知道C语言中qsort函数怎么用,看了网上其他答案,太复杂,表示不懂。所以想再问一哈,比如说我想对数组a[]={1,2,3,4,5,6};排序,想要一个具体的c语言代... 我想知道C语言中qsort函数怎么用,看了网上其他答案,太复杂,表示不懂。所以想再问一哈,比如说我想对数组a[ ]={1,2,3,4,5,6};排序,想要一个具体的c语言代码,附加说明,越简单越好,但必须用qsort。 展开
 我来答
hwd0312
推荐于2017-10-07 · TA获得超过4336个赞
知道小有建树答主
回答量:1043
采纳率:100%
帮助的人:166万
展开全部
qsort函数是编译器函数库自带的快速排序函数。
qsort 的函数原型是:
void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
它的参数为: 1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
它在使用的时候需要包含头文件:stdlib.h
实例:
#include<stdio.h>
#include<stdlib.h>
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int *array;
int n;
scanf("%d",&n);
array=(int*)malloc(n*sizeof(int));
int i=0;
for(;i<n;i++)
{
scanf("%d",(array+i));
}
qsort(array,n,sizeof(int),comp);
for(i=0;i<n;i++)
{
printf("%d\t",array[i]);
}
return0;
}
whacjq
推荐于2017-10-06 · TA获得超过576个赞
知道小有建树答主
回答量:249
采纳率:0%
帮助的人:181万
展开全部
#include<stdio.h>
#include<stdlib.h>
int cmp(const void*a,const void*b) // 排序规则(按降序排)
{
return *(int*)b-*(int*)a;
}

int main()
{
int a[]={1,2,3,4,5,6};
qsort(a,6,sizeof(int),cmp); // a是被排序的数组 6是排序元素的个数 sizeof(int)是每个元素所占的字节数 cmp是排序规则

for(int i=0;i<6;i++) //输出
printf("%d ",&a[i]);
return 0;
}
追问
我用的VC编译,发现你的程序得出的结果不是比较的结果啊。你再试试,我能看懂你的程序,你调试一下。
追答
#include
#include
int cmp(const void*a,const void*b) // 排序规则(按降序排)
{
return *(int*)b-*(int*)a;
}

int main()
{
int a[6]={1,2,3,4,5,6},i;
qsort(a,6,sizeof(int),cmp); // a是被排序的数组 6是排序元素的个数 sizeof(int)是每个元素所占的字节数 cmp是排序规则
for(i=0;i<6;i++) //输出
printf("%d ",a[i]);
return 0;
}

好了 多加了个& 直接打的没编译过 不好意思
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
赵韦华和
2013-06-08 · 超过51用户采纳过TA的回答
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:118万
展开全部
#include<stdio.h>
typedef int* ipfun(int *a,int *b);//用qsort一般最好写成typedef int* ipfun(const int *a,const int *b);
int paixu(int *a,int *b)//int paixu(const int *a,const int *b)//
{

if(*a<*b)return -1;
else if(*a>*b)return 1;
else
return 0;

}

int main()
{

int i,a[8]={1,2,3,4,5,7,6,8,};
qsort(a,8,sizeof(int),paixu);//第一个是要操作的数组,第二个是要操作的数组的大小,第三个是要操作的数组的类型长度,第四个是一个函数指针。
for(i=0;i<8;i++)
{
printf("%4d",a[i]);
}
printf("\n");

}
追问
我用VC编译不过啊
追答
哪错了?
我编译通过了啊,要学会调试噻
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
綦唱饶友琴
2019-09-08 · TA获得超过3792个赞
知道大有可为答主
回答量:3059
采纳率:24%
帮助的人:228万
展开全部
因为排序的关键是对要排序的数据两两比较大小,比较大小的不同决定了排序依据的不同,传入不同的函数指针,实现不同的大小比较就能改变排序顺序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式