Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] ordinare una matrice con bubble sort

    salve ragazzi,sto cercando una funzione che mi permetta di riordinare gli elementi di una matrice in ordine crescente rispetto alla scansione per righe; in pratica dopo l'ordinamento i valori della matrice dovranno soddisfare la seguente condizione:A[0][0]<A[0][1]<...<A[0][N-1]<A[1][0]<...<A[1][N-1]<...<A[M-1][N-1

    ho provato a fare questa funzione solo che non mi riordina nulla..siccome tra pochi giorni ho l'esame qualcuno potrebbe aiutarmi per piacere...

    vi posto il programma che ho fatto,ho usato il bubble sort:


    void ordina(int m[][MAXCOL],int r1,int c1,int ord[][MAXCOL],int *r2,int *c2)

    {
    int i,j,temp;

    for(i=0;i<r1;i++){
    for(j=0;j<c1;j++){

    if(m[i][j]>m[i+1][j]){
    temp=m[i][j];
    m[i][j]=m[i+1][j];
    m[i+1][j]=temp;

    }


    }
    }

    ord[i][j]=m[i][j];


    *r2=r1;
    *c2=c1;

    }

  2. #2
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    penso che ti serva un'altro for

    cioè ad ogno passo dei due cicli for avrai l'elemnto piu' grande nell'ultima posizione della matrice ad esempio per una matrice 3*3 nella locazione A[2][2] ,
    a questo punto dovrai rieseguire i due for senza tener conto dell'ultimo elemento della matrice che è sicuramente la piu' grande

    se non mi sbaglio cè un modo per indicizzare un elemento di una matrice con un unico indice ,questa cosa ti potrebbe tornare molto utile

    p.s.
    ord[i][j]=m[i][j];
    se è un tentativo di copia di una matrice non funziona

    fammi sapere come procede il tuo lavoro

  3. #3
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    ho trovato l'algoritmo che fa per te!!

    (Questo te lo puoi compilare e provarlo per vedere come funziona)

    #define N_COL 3
    #define N_ROW 3

    int main(int argc, char *argv[])
    {
    int matrice[N_ROW][N_COL];
    int j,i,cont=N_ROW*N_COL,tmp,passi;
    int* ptr;
    int* ptrApp;
    //inserimento
    for(i=0;i<N_ROW;i++)
    for(j=0;j<N_COL;j++,cont--)
    matrice[i][j]=cont;

    printf("stampa prima\n");
    for(i=0;i<N_ROW;i++)
    {
    for(j=0;j<N_COL;j++,cont-1)
    {
    printf("%d ",matrice[i][j]);
    }
    printf("\n");
    }


    printf("\nstampa dopo\n");
    //ordina
    passi=(N_ROW*N_COL);
    ptr=*matrice;
    for(i=0;i<N_ROW*N_COL-1;i++)
    {
    for(j=0;j<passi-1;j++)
    {

    if( *(ptr+j)> *(ptr+j+1))
    {
    tmp=*(ptr+j);

    ptrApp=(ptr+j);
    *ptrApp=*(ptr+j+1);

    ptrApp=(ptr+j+1);
    *ptrApp=tmp;

    }
    }
    passi--;
    }//fine ordina

    //stampa dopo
    for(i=0;i<N_ROW;i++)
    {
    for(j=0;j<N_COL;j++)
    {
    printf("%d ",matrice[i][j]);
    }
    printf("\n");
    }

    system("PAUSE");
    return 0;
    }

  4. #4
    il tuo programma non mi è chiaro..se per piacere mi dici come fare semplicemente nella mia funzione di ordinamento..grazie

    se qualcun altro saprebbe in grado di aiutarmi ...grazie

  5. #5

    ecco il nuovo codice

    provando dalla mattina alla sera la funzione che mi permetti di ordinare la matrice solo che ancora non ho ottenuto il risultato sperato...,potreste gentilmente aiutarmi perchè lunedi ho l'esame..grazie mille

    vi mando il nuovo codice:

    void ordina(int m[][MAXCOL],int r,int c)

    {
    int i,j,k,t,dim,temp;
    int v[MAXRIG];
    for(i=0;i<r;i++)
    for(j=0;j<c;j++)
    v[i*j]=m[i][j];

    for(k=1;k<(i*j);k++)
    for(t=0;t<((i*j)-i);t++)
    if(v[t]>v[t+1]){
    temp=v[t];
    v[t]=v[t+1];
    v[t+1]=temp;
    m[i][j]=v[t];

    m[i][j]=v[t];
    }
    }


    peccato ke ancora nn funzioni..dov'è l'orrore???

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 © 2024 vBulletin Solutions, Inc. All rights reserved.