看来我的qsort没有给出正确的结果为什么?

时间:2011-12-01 22:47:23

标签: c qsort

这是我的比较功能:

   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之前和之后,没有任何改变,

为什么呢?提前谢谢。

2 个答案:

答案 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

同样适用于第二行。