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