2016-03-27 2 views
1

У меня есть массив struct, который я хочу сортировать в порядке возрастания.Сортировка массива структур в C

После довольно много исследований по переполнению стека, я нашел sorting members of structure array.

Поэтому у меня есть следующий код:

#include <stdio.h> 
#include <stdlib.h> 

typedef struct StockItem { 
    int unitPrice; 
    // ... 
} stockItem; 

int comparePrice(const void* a, const void* b) 
{ 
    stockItem *stockItem1 = (stockItem *) a; 
    stockItem *stockItem2 = (stockItem *) b; 
    return stockItem1->unitPrice - stockItem2->unitPrice; 
} 

int main() { 
    stockItem stockItem1; 
    stockItem1.unitPrice = 15; 

    stockItem stockItem2; 
    stockItem2.unitPrice = 41; 

    stockItem stockItem3; 
    stockItem3.unitPrice = 25; 

    stockItem stockItems[3] = {stockItem1, stockItem2, stockItem3}; 
    int size = 3; 

    qsort(stockItems, (size_t) size, sizeof(int), comparePrice); 

    printf("\n"); 
    for (int i = 0; i < size; i++) { 
     printf("%d\n", stockItems[i].unitPrice); 
    } 

    return 0; 
} 

Однако, это, кажется, не для сортировки массива.

+1

Какой выход вы получаете? –

+0

Что такое 'sizeof (int)' и 'sizeof (stockItem)'? – dbush

+0

Он просто вернул тот же массив без изменений –

ответ

4

Это странно. Единственное, что я вижу, это то, что вы должны использовать sizeof(stockItem), а не int, но это не имеет значения, если ваша система не имеет странного выравнивания. Кроме того, приведение к size_t по размеру не требуется, но это определенно не имеет значения.

Редактировать: Я попытался добавить ссылку на код, работающий в Интернете, но это плохие ссылки. В принципе, выравнивание структуры не гарантируется, если вы не используете упаковку.

+0

Это должен быть комментарий. –

+0

Это на самом деле ответ! Попытайтесь переписать свой пост, чтобы быть более подходящим в качестве ответа. Я использовал 'sizeof (int)', где я должен был использовать 'sizeof (stockItem)'. –

+2

Да, это должно быть, я отправил слишком рано, потому что у меня толстые пальцы на мобильном телефоне –

Смежные вопросы