qsort неправильно сортирует структуру - PullRequest
1 голос
/ 25 октября 2010

Я пытаюсь отсортировать структуру, созданную мною через 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 - это количество записей в глобальной переменной.

Судя по написанным мною принтфам, похоже, ничего не делает.

Я инициализировал в начале моего кода глобально, как это

INPUT *global[4];

Есть идеи, что я сделал не так?

Спасибо

Ответы [ 2 ]

2 голосов
/ 25 октября 2010

Когда вы отправляете *global на qsort, я могу представить, что вы определили global как:

INPUT **global;

Таким образом, когда вы задаете sizeof(global)/fileNumber в качестве третьего аргумента qsort, sizeof, вероятно, равно 4 (или 8 в 64-битных системах). Тогда этот аргумент вероятно равен нулю.

Следовательно, qsort ничего не делает с массивом нулевого элемента и никогда не вызывает compare.

1 голос
/ 25 октября 2010

Вы 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.

...