Ho capito!
Avevo fatto degli errori nell´uso di qsort (sizeof e void):
ecco il codice funzionante:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _amplitude_index{ // Struct to store and order the values of the amplitudes preserving the index in the original array
float amplitude;
int index;
} t_amplitude_index;
int compare_structs (const void *a, const void *b);
int main (int argc, const char * argv[]) {
int length_array_range = 10;
t_amplitude_index *array_amplitudes;
array_amplitudes = (t_amplitude_index *) malloc(sizeof(t_amplitude_index) * length_array_range);
int i;
for(i = 0; i< length_array_range;i++){
array_amplitudes[i].amplitude = (float)i;
array_amplitudes[i].index = i;
}
for(i = 0; i< length_array_range;i++){
printf("array_amplitudes[i].amplitude = %f, array_amplitudes[i].index = %d\n",array_amplitudes[i].amplitude,array_amplitudes[i].index);
}
qsort(array_amplitudes, length_array_range, sizeof(array_amplitudes[0]), compare_structs);
printf("\n\n");
for(i = 0; i< length_array_range;i++){
printf("array_amplitudes[i].amplitude = %f, array_amplitudes[i].index = %d\n",array_amplitudes[i].amplitude,array_amplitudes[i].index);
}
free(array_amplitudes);
return 0;
}
int compare_structs(const void *a, const void *b){
t_amplitude_index *struct_a = (t_amplitude_index *) a;
t_amplitude_index *struct_b = (t_amplitude_index *) b;
if (struct_a->amplitude < struct_b->amplitude) return 1;
else if (struct_a->amplitude == struct_b->amplitude) return 0;
else return -1;
}