这是我的比较功能:
int compare (const void * a, const void * b)
{
ptnode * ia = (ptnode*)a;
ptnode * ib = (ptnode*)b;
return (int)(100.f*ia->x - 100.f*ib->x );
}
我将qsort称为:
qsort(sortbase,index,sizeof(ptnode),compare);
sortbase是我的struct ptnode的数组,定义为:
typedef struct node
{
struct node *pre1;
struct node *pre2;
struct node *pre;
double x;
double y;
double maxlength;
} ptnode;
sortbase是这样的:
struct node * sortbase[1000];
我想按x值排序,但在qsort之前和之后,没有任何改变,
为什么呢?提前谢谢。
答案 0 :(得分:5)
compare函数接收指向需要比较的2个元素的指针。由于您的元素是指针,因此compare函数需要处理指针指针。
int compare (const void * a, const void * b)
{
ptnode * ia = *(ptnode**)a;
ptnode * ib = *(ptnode**)b;
return (int)(100.f*ia->x - 100.f*ib->x );
}
答案 1 :(得分:3)
qsort
传递给compare
数组中每个元素的地址(非值),即它传递指向{{1}的指针的指针}。您需要将ptnode
的第一行更改为:
compare
同样适用于第二行。