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

Rispondi quotando