PDA

View Full Version : Ordinamento per inserzione con file.


lucas87
13-01-2007, 17:19
Porre in un file di nome data.txt un elenco (almeno 50) di nomi di studenti,numeri identificati, eta e voti.

Rossi Mario 910017 21 30
Bianchi Ernesto 0100102 23 18
.....
.....


Scrivere un programma di nome reorder utilizzabile per leggere i dati nel file e porli in un array classe di tipo
struct student. Inoltre il programma deve stampare a video un elenco ordinato degli studentu e dei relativi voti.
Devono essere stampati per primi gli studenti con voto 30, seguiti da quelli con voto 29 e cosi via.
Gli studentu con la setssa votazione dovrebbero essere elencati in ordine alfabetico. Per l'ordinamento, utilizzare
l'algoritmo di ordinamento per inserzione.

Qualcuno ha qualche idea?

Grazie

lucas87
13-01-2007, 17:20
A volte sono davvero coglione, se qualcuno volesse postare codifiche, fatelo per favore in C semplice.

stella_650
13-01-2007, 17:33
void insertion_sort(int x[], int n)
{
int i, j, app;

for (i=1; i<n; i++) {
app = x[i];

j = i-1;
while ((j>=0) && (x[j]>app)) {
x[j+1] = x[j];
j--;
}

x[j+1] = app;
}

}
Questo e' il codice di una funzione che implementa l'insertion sort: come parametri di input essa prende un array di interi che è quello da ordinare e n che invece è il numero di elementi dell'array.Esso è un algoritmo in place, cioè ordina l'array senza doverne creare un altro “di appoggio”, quindi risparmia memoria.
L'algoritmo utilizza due indici: il primo punta inizialmente al secondo elemento dell'array, il secondo inizia dal primo. Se il primo elemento è maggiore del secondo, i due valori vengono scambiati. Poi il primo indice avanza di una posizione e il secondo indice riparte dall'elemento precedente quello puntato dal primo. Se l'elemento puntato dal secondo indice non è maggiore di quello a cui punta il primo indice, il secondo indice avanza; e così fa, finché si trova nel punto in cui il valore del primo indice deve essere inserito (da qui insertion). L'algoritmo così tende a spostare man mano gli elementi maggiori verso destra.