Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408

    [C] Bubble Sort per una matrice 4x4

    Salve a tutti. Devo ordinare le righe di una matrice 4 per 4. La matrice la leggo da file, la inserisco in un array 4 per 4 e a quel punto devo ordinarla. Ora, il bubble sort studiato all'università l'avevo applicato soltanto ad array monodimensionali. Ho provato a modificarlo per un array bidimensionale, ma non funzionava. Ho cercato su internet ma non ho trovato qualcosa che mi potesse aiutare. Non so più dove sbattere la testa. Non capisco perchè non funziona, visto che è lo stesso algoritmo , ho modificato soltanto da vettore a matrice..
    Qualche aiuto?

    codice:
    #include <stdio.h>
    #define M   4
    
    int lettura(int matrice[][M]);
    void visualizza_non_ordinata(int matrice[][M], int dim);
    void bubblesort(int matrice[][M], int dim);
    void visualizza_ordinata(int matrice[][M], int dim);
    
    int main(){
        int i, j, dim, tmp;
        int matrice[M][M];
    
        dim=lettura(matrice);
    
        printf("Stampa della matrice non ordinata:\n");
        visualizza_non_ordinata(matrice, dim);
    
        bubblesort(matrice, dim);
    
        printf("\nStampa della matrice ordinata:\n");
        visualizza_ordinata(matrice, dim);
    }
    
    int lettura(int matrice[][M]){
        FILE *f;
        int dim, i, j;
        f=fopen("matrice.txt", "r");
        fscanf(f, "%d", &dim);
        for(i=0; i<M; i++){
            for(j=0; j<M; j++){
                fscanf(f, "%d", &matrice[i][j]);
            }
        }
        fclose(f);
        return dim;
    }
    
    void visualizza_non_ordinata(int matrice[][M], int dim){
        int i, j;
        for(i=0; i<dim; i++){
            for(j=0; j<dim; j++){
                printf("%d ", matrice[i][j]);
            }
            printf("\n");
        }
    }
    
    void bubblesort(int matrice[][M], int dim){
        int i, j, tmp;
        for(i=dim-1; i>0; i--){
            for(j=0; j<i; j++){
                if(matrice[i][j]>matrice[i][j+1]){
                    tmp=matrice[i][j];
                    matrice[i][j]=matrice[i][j+1];
                    matrice[i][j+1]=tmp;
                }
            }
        }
    }
    
    void visualizza_ordinata(int matrice[][M], int dim){
        int i, j;
        for(i=0; i<dim; i++){
            for(j=0; j<dim; j++){
                printf("%d ", matrice[i][j]);
            }
            printf("\n");
        }
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In che senso devi ordinare una matrice 4x4 ?

    Ovvero, come deve risultare ordinata alla fine?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da oregon
    In che senso devi ordinare una matrice 4x4 ?

    Ovvero, come deve risultare ordinata alla fine?
    Ogni riga deve essere ordinata dal numero più piccolo al più grande. E' una matrice di interi.

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    void bubblesort(int matrice[][M], int dim){
        int i, j, tmp;
        for(i=dim-1; i>0; i--){
            for(j=0; j<i; j++){
                if(matrice[i][j]>matrice[i][j+1]){
                    tmp=matrice[i][j];
                    matrice[i][j]=matrice[i][j+1];
                    matrice[i][j+1]=tmp;
                }
            }
        }
    }
    Riscrivi il bubblesort in modo che funzioni su un singolo vettore, poi utilizzi il bubblesort su ogni riga della matrice:
    codice:
    for(int i=0;i<4;i++)       // iso c99
        bubblesort(matrice[i],4);

  5. #5
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da ramy89
    Riscrivi il bubblesort in modo che funzioni su un singolo vettore, poi utilizzi il bubblesort su ogni riga della matrice:
    codice:
    for(int i=0;i<4;i++)       // iso c99
        bubblesort(matrice[i],4);
    Grazie
    Avevo pensato ad una cosa del genere ma chissà perchè mi ero intestardito nel voler modificare l'algoritmo. La soluzione migliore è sempre quella più semplice

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.