|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2007
Messaggi: 28
|
MERGESORT STRINGHE CON ARRAY BIDIMENSIONALI
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: 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);
}
}
Grazie per chi mi risponderà Ultima modifica di markz88 : 05-02-2011 alle 12:38. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
non ho capito, la domanda è come fare ad allocare dinamicamente una matrice?
se sì, così: Codice:
char **b;
b = malloc(sizeof(char*) * (r - l + 1));
// Ci sarebbe da controllare se l'allocazione è andata a buon fine
int i;
for (i = 0; i < (r - l + 1); i++)
{
b[i] = malloc(sizeof(char) * 21);
// Come sopra
}
|
|
|
|
|
|
#3 | |
|
Junior Member
Iscritto dal: May 2007
Messaggi: 28
|
Quote:
Però l'algoritmo continua a non fare cosa richiesto, al posto delle stringhe ordinate mi stampa una serie di caratteri del tipo: Codice:
– š ž ¢ ¦ ª ® ² ¶ º ¾ Â Æ Ê Î Ò Ö Ú Þ â æ ê î ò ö Codice:
void fusiones(char f[][21],int l, int m, int r){
int i, j, k;
char **b;
b = malloc(sizeof(char*) * (r - l + 1));
// Ci sarebbe da controllare se l'allocazione è andata a buon fine
for (i = 0; i < (r - l + 1); i++)
{
b[i] = malloc(sizeof(char) * 21);
// Come sopra
}
i = l;
j = m+1;
k=0;
while((i <= m) && (j <=r)){
if (strcmp(f[i], f[j]) < 0)
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);
}
}
Ultima modifica di markz88 : 05-02-2011 alle 13:29. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:11.




















