2016-03-27 13 views
1

Ich habe ein Array von Struktur, die ich in aufsteigender Reihenfolge sortieren möchte.Sortierung eines Arrays von Strukturen in C

Nach ziemlich viel Forschung auf Stack Overflow, fand ich sorting members of structure array.

Deshalb habe ich den folgenden Code:

#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; 
} 

Doch dies scheint nicht das Array zu sortieren.

+1

Welche Ausgabe erhalten Sie? –

+0

Was ist 'sizeof (int)' und 'sizeof (stockItem)'? – dbush

+0

Es hat nur das gleiche Array zurückgegeben, ohne Änderungen –

Antwort

4

Das ist komisch. Die einzige Sache, die ich sehen kann, ist, dass Sie sizeof(stockItem), nicht int verwenden sollten, aber das sollte nicht wichtig sein, wenn Ihr System seltsame Ausrichtung hat. Auch die Besetzung auf Größe ist nicht notwendig, aber das ist definitiv egal.

Edit: Ich habe versucht, einen Link zum Code hinzuzufügen, der online arbeitet, aber ich bin schlechte Links. Grundsätzlich ist die Strukturausrichtung nicht garantiert, es sei denn, Sie verwenden Packen.

+0

Dies sollte ein Kommentar sein. –

+0

Das ist eigentlich die Antwort! Versuchen Sie, Ihren Beitrag so zu formulieren, dass er besser als Antwort passt. Ich habe 'sizeof (int)' verwendet, wo ich 'sizeof (stockItem)' hätte verwenden sollen. –

+2

Ja sollte es, ich postete zu früh, weil ich dicke Finger auf Handy habe –