为什么“qsort”功能不起作用?在我的代码中的标准库中工作?
#include<stdio.h>
#include<stdlib.h>
#define MAX 1000
struct island{ double left; //gobal
double right;
} island[MAX];
...
int cmp(const void *ptr1,const void *ptr2 )
{
return (*(struct island*)ptr1).right > (*(struct island*)ptr2).right;
}
qsort(island,num,sizeof(island[0]),cmp); // "num" is the number of the input data
//when I do print,it seems that if num<10 is right,else wrong
for(i=0;i<num;i++)
{
printf("%g\t",island[i].right);
}
#include<stdio.h>
#include<stdlib.h>
#define MAX 1000
struct island{ double left; //gobal
double right;
} island[MAX];
...
int cmp(const void *ptr1,const void *ptr2 )
{
return (*(struct island*)ptr1).right > (*(struct island*)ptr2).right;
}
qsort(island,num,sizeof(island[0]),cmp); // "num" is the number of the input data
//when I do print,it seems that if num<10 is right,else wrong
for(i=0;i<num;i++)
{
printf("%g\t",island[i].right);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
的
cmp
函数应该返回>
,1
或更大值,如果如果左侧值<
右侧值,则-1
或更小您的比较仅返回1
(对于>
情况)或0
(所有其他情况)。Your
cmp
function is supposed to return1
or greater if the left value is>
the right value0
if the values are equal-1
or less if the left value is<
the right valueYour comparison only returns
1
(for the>
case) or0
(all other cases).如果左侧项目大于右侧项目,您的
cmp
函数将返回1
,否则返回0
。qsort
的文档指出:尝试一下您的比较功能:
Your
cmp
function is returning1
if the left item is greater than the right item, otherwise it's returning0
. The documentation forqsort
states:Try this for your compare function:
来自 qsort 手册页:
在我看来,你们的 cmp 并没有这样做。
From the qsort man page:
It looks to me like your cmp doesn't do that.
cmp() 函数应返回 -1、0 或 1(或任何负数/0/任何正数)来表示给定对象的排序。你的函数返回 0 或 1。
尝试使用:
the
cmp()
function should return -1, 0 or 1 (or any negative/0/any positive)to represent ordering of the given objects. your function returns 0 or 1.try with: