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