1

这是我的比较功能:

   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;

排序库是这样的:

struct node * sortbase[1000];

我想按它们的 x 值对它们进行排序,但是在 qsort 之前和之后,没有任何变化,

为什么?提前致谢。

4

2 回答 2

5

compare 函数接收一个指向您需要比较的 2 个元素的指针。由于您的元素是指针,因此比较函数需要处理指向指针的指针。

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 );
}
于 2011-12-01T22:54:23.663 回答
3

qsort传递给数组每个元素compare地址(不是值),即,它传递一个指向 a 的指针的指针ptnode。您需要将第一行更改compare为:

ptnode * ia = *(ptnode**)a;

第二行也是如此。

于 2011-12-01T22:55:16.957 回答