2010-10-25 54 views
1

我想排序我通过qSort创建的结构,但它似乎是做我期望的结果。qsort不正确排序结构

这是我比较功能

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

在哪里输入我的结构,开始时间是在它的int。

我这个

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

全球在哪里输入的变量名称叫快速排序,fileNumber是许多条目是如何在全局变量中。

从我写的printf语句看来,它什么都不做。

我在我的代码开始初始化的全局像这样

INPUT *global[4]; 

对我做了什么不对任何想法?

感谢

+0

“fileNumber”和“global”的定义是什么?不确定,但它看起来像'global'是一个指针,所以'sizeof(global)'可能不是你所追求的,你可能不想在第一个参数中解引用它。 – torak 2010-10-25 13:43:52

+1

你的意思是* qsort系列中的全球?还是仅仅是全球?什么是“全球”的类型? – 2010-10-25 13:44:30

+0

你是如何分配全球? – 2010-10-25 13:46:48

回答

2

当你发送*globalqsort,我可以想像,你定义global为:

INPUT **global; 

因此,当你给sizeof(global)/fileNumber作为第三个参数qsortsizeof大概是4(或8在64位系统上)。那么这个论点可能是零。

因此qsort对零元素数组不做任何处理,也不会调用compare

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结构体。