Domanda

Ecco il mio codice:

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

float comp (const void * elem1, const void * elem2) {
    float f = *((float*)elem1);
    float s = *((float*)elem2);
    if (f > s) return  1;
    if (f < s) return -1;
    return 0;
}

int main(void) {
    int t, n, temp, temp1, x;
    float input[2][50][1000];
    scanf("%d", &t);
    for(temp=0; temp<t; temp++){
        scanf("%d ", &n);
        for(temp1=0; temp1<n; temp1++){
            scanf("%f", &input[0][temp][temp1]);
        }
        for(temp1=0; temp1<n; temp1++){
            scanf("%f", &input[1][temp][temp1]);
        }
        for(x=0; x<temp1; x++){
            printf("%f", input[0][temp][x]);
        }
        qsort (input[0][temp], n, sizeof(*input[0][temp]), comp);
        printf("\n Sorted Array:");
        for(x=0; x<temp1; x++){
            printf("%f", input[0][temp][x]);
        }

    }
    return 0;
}
.

Ed ecco il mio risultato: 0.7000000.2000000.800000. Array ordinato: 0.7000000.2000000.800000

Qualcuno può dire perché qsort () non funziona per me?

È stato utile?

Soluzione

Le funzioni di confronto devono restituire int (non float).Quindi cosa devi fare è, cambia questo: float comp (const void * elem1, const void * elem2) { to int comp (const void * elem1, const void * elem2) { Eccolo!:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top