markz88
05-02-2011, 12:36
Salve a tutti,
devo ordinare delle stringhe (di massimo 20 caratteri l'una) dentro un array bidimensionale con l'algoritmo mergesort, ho modificato il codice per adattarlo dall'ordinamento dei numeri all'ordinamento delle stringhe, ma non ottengo il risultato sperato.. credo che il problema sia nell'allocazione dinamica del vettore b, dovrebbe essere un vettore bidimensionale b[r-l+1][21] dinamico, come posso allocarlo dinamicamente? Ecco il mio codice:
void fusiones(char f[][21],int l, int m, int r){
int i, j, k;
char *b;
b = malloc((r - l + 1) * sizeof(char));
i = l;
j = m+1;
k=0;
while((i <= m) && (j <=r)){
if (f[i] < f[j])
strcpy(f[k++], f[i++]);
else
strcpy(f[k++], f[j++]);
}
while(i <= m)
strcpy(b[k++], f[i++]);
while(j <= r)
strcpy(b[k++], f[j++]);
i=l;
k=0;
while ( i <= r)
strcpy(f[i++], b[k++]);
free(b);
}
void mergesorts(char f[][21], int l, int r){
int m;
if (l < r){
m = (l + r) / 2;
mergesorts(f, l, m);
mergesorts(f, m+1, r);
fusiones(f, l, m, r);
}
}
Allocandolo come nel mio codice viene un array dinamico b[r-l+1], come faccio ad allocare dinamicamente un array di questo tipo b[r-l+1][21]?
Grazie per chi mi risponderà
devo ordinare delle stringhe (di massimo 20 caratteri l'una) dentro un array bidimensionale con l'algoritmo mergesort, ho modificato il codice per adattarlo dall'ordinamento dei numeri all'ordinamento delle stringhe, ma non ottengo il risultato sperato.. credo che il problema sia nell'allocazione dinamica del vettore b, dovrebbe essere un vettore bidimensionale b[r-l+1][21] dinamico, come posso allocarlo dinamicamente? Ecco il mio codice:
void fusiones(char f[][21],int l, int m, int r){
int i, j, k;
char *b;
b = malloc((r - l + 1) * sizeof(char));
i = l;
j = m+1;
k=0;
while((i <= m) && (j <=r)){
if (f[i] < f[j])
strcpy(f[k++], f[i++]);
else
strcpy(f[k++], f[j++]);
}
while(i <= m)
strcpy(b[k++], f[i++]);
while(j <= r)
strcpy(b[k++], f[j++]);
i=l;
k=0;
while ( i <= r)
strcpy(f[i++], b[k++]);
free(b);
}
void mergesorts(char f[][21], int l, int r){
int m;
if (l < r){
m = (l + r) / 2;
mergesorts(f, l, m);
mergesorts(f, m+1, r);
fusiones(f, l, m, r);
}
}
Allocandolo come nel mio codice viene un array dinamico b[r-l+1], come faccio ad allocare dinamicamente un array di questo tipo b[r-l+1][21]?
Grazie per chi mi risponderà