Ah ma voi parlavate del qsort predefinito del C? Io pensavo dovessi scrivere tu la funzione... comunque qui ho la mia soluzione adattata al tuo caso, è un po' rozza perché non mi ci sono soffermato tanto ma funziona (il pivot viene scelto staticamente, cosa non proprio tra le migliori ma comunque efficace)
codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char nome[20];
float x;
} struttura;
void sort(struttura *, int, int);
void swap(struttura *, struttura *);
void immissione_dati(struttura *, int);
void visualizza_dati(struttura *, int);
int main(void)
{
struttura *array;
int i, n;
printf("Immettere il numero delle componenti dell'array da ordinare: ");
scanf("%d%*c", &n);
array = (struttura *)malloc(n*sizeof(struttura));
immissione_dati(array, n);
puts("\n");
sort(array, 0, n-1);
visualizza_dati(array, n);
scanf("\n%*c");
return 0;
}
void sort(struttura *array, int inizio, int fine) {
int i, j;
struttura pivot;
if (fine > inizio) {
pivot = *(array + inizio);
i = inizio + 1;
j = fine + 1;
while(i < j) {
if(array[i].x < pivot.x)
i++;
else {
j--;
swap(array + i, array + j);
}
}
i--;
swap(array + inizio, array + i);
sort(array, inizio, i);
sort(array, j, fine);
}
}
void swap(struttura *p1, struttura *p2) {
struttura temp;
temp=*p2;
*p2=*p1;
*p1=temp;
}
void immissione_dati(struttura *array, int n) {
short i;
printf("Immettere i dati:\n");
for (i=0; i<n; i++) {
printf("\nStruttura %hd\nNome: ", i+1);
gets(array[i].nome);
printf("Float: ");
scanf("\n%f%*c", &(array[i].x));
puts("\n");
}
}
void visualizza_dati(struttura *array, int n) {
short i;
for (i=0; i<n; i++) {
printf("Nome: %s\nFloat: %f\n\n", array[i].nome, array[i].x);
}
}