Come ordinare i record di un file tramite bubble sort

di il
3 risposte

Come ordinare i record di un file tramite bubble sort

Salve a tutti. Mi trovo alle prese con un piccolo problema di ordinamento. Dopo aver scritto dei record su un file in modalità "w" vorrei ordinarli con il semplice algoritmo bubble sort.

Supponendo che questo sia il codice per la normale stampa dei record:
FILE * lettura;
struct struttura{
    char nome[20];
    int anni;
    int punti;
    int numero;
};
struct struttura stru;

int main()
{
     lettura = fopen ("dati.dat", "r");
        if (lettura == NULL){
            fprintf(stderr, "\nERRORE\n");
            exit (1);
        }else{
            while(fread(&stru, sizeof(struct struttura), 1, lettura)){
                printf("dati %s, %d, %d, %d\n", stru.nome, stru.anni, stru.punti, stru.numero);
            }
        }

    fclose(lettura);
}
Come potrei fare per stamparli ordinati in base a stru.numero? Conosco l'algoritmo (due cicli for e scambi che avvengono tramite variabile temporanea) ma non so come applicarlo con i record su file.

3 Risposte

  • Re: Come ordinare i record di un file tramite bubble sort

    Come ti ho detto altre volte (forse non sono stato chiaro) devi aprire il file in binario e rispettare tutte le regole della lettur/scrittura dei record nei file binari.
  • Re: Come ordinare i record di un file tramite bubble sort

    Quindi scrivo i record in wb e leggo in rb. Ma poi come posso applicare l'algoritmo?
  • Re: Come ordinare i record di un file tramite bubble sort

    sadN00b ha scritto:


    Quindi scrivo i record in wb e leggo in rb. Ma poi come posso applicare l'algoritmo?
    Gestisci il file in rb+

    Hai due possibilità

    - carichi tutti i record in memoria (se non sono molti), li ordini in memoria e li riscrivi sul file

    - carichi in memoria solo i due record cha stai confrontanto e, se necessario scambiarli, li riscrivi nelle posizioni corrette

    Mi chiedo come possiate affrontare certi esercizi senza avere mai studiato la (semplice) teoria che ci sta dietro.
Devi accedere o registrarti per scrivere nel forum
3 risposte