Dubbio qsort() in [C]

Messaggioda fk16 » 08/02/2012, 18:47

Ragazzi ciao a tutti avevo bisogno di un aiuto su un esercizio, visto che domani ho un esame.
In parole povere vorrei ordinare una matricre n*m. Ho già implementato questa funzione usando l'algoritmo del bubble sort. Ora vorrei tentare a farlo con l'algoritmo del qsort(). Ho scritto questo frammento di codice:
Codice: Seleziona tutto
void ordina(double **mat, int n, int m){
     int i,j;             
       for(j=0;j<m;j++)
           qsort(mat[j],m,sizeof(double),cmp);
          for(i=0;i<n;i++){
           qsort(mat[i],n,sizeof(double),cmp);   
           }
           return;
           }             

int cmp(const void *vp, const void *vq){
    const double *p=vp;
    const double *q=vq;
    double diff= *p - *q;
    return((diff >= 0.0)?((diff > 0.0)? -1:0): +1);
}

             

Il problema è che quando stampo la matrice, le righe di essa mi vengono ordinate mentre le colonne no. Perchè accade questo?? cosa sbaglio??
Grazie per eventuali risposte.
fk16
Junior Member
Junior Member
 
Messaggi: 220
Iscritto il: 08/03/2011, 13:39

Re: Dubbio qsort() in [C]

Messaggioda apatriarca » 08/02/2012, 19:39

Ma che cosa dovrebbe fare esattamente il tuo codice? Non è possibile ordinare gli elementi su di una colonna della matrice usando un comando come
Codice: Seleziona tutto
qsort(mat[i], n, sizeof(double), cmp);

Per il semplice motivo che gli elementi lungo le colonne della matrice non sono allocati in posizioni adiacenti. In effetti, non è in generale neanche possibile stimare la posizione dell'elemento successivo lungo una colonna rappresentando le matrici come array di righe allocate dinamicamente. In effetti, non credo che sia possibile modificare il tuo codice per ordinare gli elementi lungo le colonne utilizzando qsort.
apatriarca
Moderatore
Moderatore
 
Messaggi: 2124
Iscritto il: 08/12/2008, 20:37
Località: Torino


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

cron