Dubbio qsort() in [C]

fk16
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:
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.

Risposte
apatriarca
Ma che cosa dovrebbe fare esattamente il tuo codice? Non è possibile ordinare gli elementi su di una colonna della matrice usando un comando come
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.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.