26/05/10 17:51
MagoAntò
Ciao a tutti!
Sono alle prese con il seguente programma:
"Implementare in C l'algoritmo Exchange Sort (Bubble Sort) su un array di struttura in versione iterativa mediante scambi virtuali."
Citando la prof, per scambi virtuali intendiamo: "i dati non sono fisicamente spostati perchè si opera tramite puntatori. Scambiamo solo i puntatori".
Questo è il mio codice:
Così com'è, l'algoritmo funziona. Secondo voi, può essere migliorato? Ho qualche dubbio sui puntatori... Grazie in anticipo per la risposta!
Sono alle prese con il seguente programma:
"Implementare in C l'algoritmo Exchange Sort (Bubble Sort) su un array di struttura in versione iterativa mediante scambi virtuali."
Citando la prof, per scambi virtuali intendiamo: "i dati non sono fisicamente spostati perchè si opera tramite puntatori. Scambiamo solo i puntatori".
Questo è il mio codice:
#include <stdio.h> #include <stdlib.h> #define sizearray 10 struct dato { char chiave; short info; }; typedef struct dato DATO; void bubble_sort_it_sv (DATO array []); void main () { DATO array [sizearray]; short i; for (i=0; i<sizearray; i++) { printf ("Digita la chiave del %hd-simo elemento: ", i+1); fflush (stdin); scanf ("%c", &array[i].chiave); printf ("Digita l'informazione del %hd-simo elemento: ", i+1); fflush (stdin); scanf ("%hd", &array[i].info); printf ("\n"); } system ("CLS"); printf ("Le informazioni inserite sono:\nCHIAVE\t\tINFO\n"); for (i=0; i<sizearray; i++) { printf ("%c\t\t%hd\n", array[i].chiave, array[i].info); } printf ("\n"); system ("PAUSE"); bubble_sort_it_sv (array); printf ("\nL'array ordinato e':\nCHIAVE\t\tINFO\n"); for (i=0; i<sizearray; i++) { printf ("%c\t\t%hd\n", array[i].chiave, array[i].info); } printf ("\n"); } void bubble_sort_it_sv (DATO array []) { DATO *punt [sizearray]; // array di puntatori DATO temp; short i, scambio; for (i=0; i<sizearray; i++) { punt[i] = &array[i]; /* ogni i-sima componente dell'array punt contiene l'indirizzo di memoria dell'i-sima componente dell'array i */ } scambio = 0; while (scambio < sizearray-1) /* L'ultima componente non verrà analizzata poichè, dopo il primo for, sarà già in posizione */ { for (i=0; i<sizearray-1; i++) /* Dopo il primo for, il massimo sarà già alla fine dell'array */ { if ((punt[i])->chiave > (punt[i+1])->chiave) { temp = *punt[i]; *punt[i] = *punt[i+1]; *punt[i+1] = temp; } } scambio ++; } }
Così com'è, l'algoritmo funziona. Secondo voi, può essere migliorato? Ho qualche dubbio sui puntatori... Grazie in anticipo per la risposta!
aaa