Non l'ho collaudato, ma dovrebbe andare.
codice:
#include <stdio.h>
#include <stdlib.h>
#define ARRSIZE(arr) ((size_t)(sizeof(arr)/sizeof(*arr)))
typedef struct tagData
{
const char *name;
float length;
} Data;
int DataCompare(const void * elem1, const void * elem2);
int main(void)
{
Data dt[3];
dt[0].name = "pippo";
dt[0].length = 0.412
dt[1].name = "pluto";
dt[1].length = 0.341
dt[2].name = "minnie";
dt[2].length = 0.123
qsort(dt,ARRSIZE(dt),sizeof(*dt),DataCompare);
for(int i=0;i<ARRSIZE(dt);i++)
printf("%s %f",dt[i].name,dt[i].length);
return 0;
}
int DataCompare(const void * elem1, const void * elem2)
{
return (int)((const Data *)elem1->length-(const Data *)elem2->length);
}