2016-09-04 4 views
-1

Ich benutze qsort, um ein Array von ganzen Zahlen zu sortieren. Aber qsort nimmt keine Änderungen im Array vor. Meine Vergleichsfunktion ist wie folgt:qsort ändert keine Änderungen am Integer-Array

int mycomp(const void *a, const void *b){ 
int *a1 = (int*)a; 
int *b1 = (int*)b; 

if (a1 < b1) 
    return -1; 
else if (a1 == b1) 
    return 0; 
else 
    return 1; 
} 

Das Array enthält:

pos[M] = {40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 5, 10, 15, 20, 15, 30, 35}; 

Und ich rief qsort wie:

qsort(pos, M, sizeof(int), mycomp); 

Der Ausgang genau das gleiche Array ist. Kann mir bitte jemand helfen?

+5

Sie markiert diese als 'C++', 'C++ 14', usw., also warum verwenden Sie qsort in einem C++ Programm? ** Vermeiden Sie die Verwendung von qsort in einem C++ - Programm ** - verwenden Sie stattdessen 'std :: sort'. Es ist so einfach wie. 'std :: sort (std :: begin (pos), std :: end (pos));' – PaulMcKenzie

+1

Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –

Antwort

4

Sie vergleichen Zeiger nicht Werte.

fix:

int a1 = *(int*)a; 
int b1 = *(int*)b; 
Verwandte Themen