我要打电话给qsort(myArray,100,sizeof(int), comp)
int comp(const int * a, const int * b)
if(a==b)
{
return 0;
}
else
{
if(a<b)
{
return -1;
}
else
{
return 1;
}
}
首先,
当我对数组(9,8,7,6,5,4,3,2,1,1),
进行排序时,我得到(4,8,7,6,5,9,3,2,1)
- 这并没有真正有效。
其次, 我怎么会朝另一个方向排序?我需要通过qsort的特殊标志吗?
答案 0 :(得分:7)
更改比较功能,以便按照您喜欢的方式进行排序。
比较函数接受指向比较数据的指针(不是数据本身)。例如
int compare (const void* p1, const void* p2)
{
int i1 = *(int*) p1;
int i2 = *(int*) p2;
if (i1 < i2) return -1;
else if (i1 == i2) return 0;
else return 1;
/* or simply: return i1 - i2; */
}
答案 1 :(得分:6)
您需要比较值,而不是它们的地址。尝试
int comp(const int * a, const int * b)
{
return *a - *b;
}
要撤销订购,请使用
int comp(const int * a, const int * b)
{
return *b - *a;
}
答案 2 :(得分:2)
您的比较器坏了。您正在比较指针值而不是指向的值。将*
取消引用运算符添加到a
和b
比较中,它应该可以正常工作。