qsort没有正确排序结构

时间:2010-10-25 13:40:09

标签: c struct qsort

我正在尝试对我通过qSort创建的结构进行排序,但它似乎正在做我期望的结果。

这是我的比较功能

int compare(const void *a, const void *b) {
    const INPUT *p1 = a;
    const INPUT *p2 = b;
    return ((p1->startTime) - (p2->startTime));
}

其中INPUT是我的结构,startTime是其中的int。

我通过这个来调用qsort

qsort(*global,fileNumber,sizeof(global)/fileNumber,compare);

其中global是INPUT的变量名,fileNumber是全局变量中的条目数。

从我写过的printf语句来看,似乎什么也没做。

我已经在我的代码全局开头初始化了

INPUT *global[4];

关于我做错了什么的任何想法?

由于

2 个答案:

答案 0 :(得分:2)

当您向*global发送qsort时,我可以想象您已将global定义为:

INPUT **global;

因此,当您将sizeof(global)/fileNumber作为qsort的第三个参数时,sizeof可能是4(或64位系统上的8)。那么这个论点可能是零。

因此qsort对零元素数组不执行任何操作,并且从不调用compare

答案 1 :(得分:1)

global数组是一个指针数组,而不是INPUT结构数组。所以你的比较函数应该类似于:

int compare(const void *a, const void *b) {
    const INPUT **p1 = a;
    const INPUT **p2 = b;
    return (((*p1)->startTime) - ((*p2)->startTime));
}

您致电qsort()

qsort(global,fileNumber,sizeof(global)/fileNumber,compare);

当然,所有这些都假设您确实使用global作为指针数组而不是指向INPUT结构数组的指针。