View Full Version : [C] Quicksort ordinamento stringhe
Misciu87
29-06-2008, 15:13
IL progetto consiste nell'ordinare un set di stringhe prese in input da un file e restituirle ordinate in un file di output, la prima parte del codice(funzioni exchange,partition e sortlist servono per l'ordinamento le altre funzioni per il caricamento delle stringhe e quelle funzionano) il mio problema e nella funzione partition in quanto questo codice funziona con gli interi ma non con i char perche' nei confronti con <> per i char è diverso dovrei usare strcmp ma non riesco a farlo funzionare, qualcuno può aiutarmi a sistemare questa parte?
while(p<r)
{
while(j>p && strcmp(list[j],pivot)<0) j--;
while(i<r && strcmp(list[j], pivot)>=0) i++;
if(i<j)
exchange(list,i,j);
}
exchange(list,p,j);
}
Misciu87
30-06-2008, 10:21
Grazie per l'aiuto veramente..
Misciu87
01-07-2008, 04:45
Qualcuno mi può aiutare per favore?
Misciu87
02-07-2008, 00:52
Proprio un bel forum questo che nessuno risponde..
Misciu87
02-07-2008, 09:22
se mi vuoi aiutare bene so no non scrivere robe a caso..
banryu79
02-07-2008, 09:36
Non è che l'errore in questo codice è questo?
da così:
while(p<r)
{
while(j>p && strcmp(list[j],pivot)<0) j--;
while(i<r && strcmp(list[j], pivot)>=0) i++;
if(i<j)
exchange(list,i,j);
}
exchange(list,p,j);
}
a così:
while(p<r)
{
while(j>p && (strcmp(list[j],pivot)<0)) j--;
while(i<r && (strcmp(list[j], pivot)>=0)) i++;
if(i<j)
exchange(list,i,j);
}
exchange(list,p,j);
}
Misciu87
02-07-2008, 09:42
Questo è l'intero codice puoi aiutarmi: non cambia nulla con la modifica che mi hai detto
void exchange(char **list, int i, int j) {
char *tmp=list[i];
list[i]=list[j];
list[j]=tmp;
}
int r) {
char q,
int i;
if(p<r)
{
q=partition(list,p,r);
sortlist(list,p,q-1);
sortlist(list,q+1,r);
}
return list;
}
void printlist(char *outputlist, char **list, int length)
{
int i;
FILE *out=fopen("outputlist.txt","w");
for(i=0; i<length; i++)
fprintf(out,"%s\n",list[i]);
fprintf(out,"\n");
fclose(out);
}
int main(int argc, const char *argv[]) {
char **list;
int length,size;
time_t start, end;
if(argc!=3)
{
printf("Usage: stringsort <input list> <output list>\n");
return 1;
}
list=loadlist((char *)argv[1],&length,&size);
start=clock();
list=sortlist(list,length,size);
end=clock();
printf("%g\n",(int)(end-start)/(int)CLOCKS_PER_SEC);
printlist((char *)argv[2],list,length);
return 0;
}[/CODE]
banryu79
02-07-2008, 09:46
Si hai ragione: non cambia nulla, ho preso io una svista :doh:
Comunque non ho tempo ne voglia di leggere il codice che hai postato, senza offesa, però posso darti un suggerimento: perchè non inserisci dei printf(...) dentro le iterazioni così vedi cosa succede e ti è più facile risalire al problema?
Misciu87
02-07-2008, 09:57
Non c'è bisogno che leggi il codice, io so che il codice funziona per gli interi devo solo modificare la funzione partition dove c'è p<r, j<r ecc in modo che funzioni per i char..non ci sono errori nel codice, solo che nell'output non stampa le stringhe in maniera ordinata
secondo me fai prima a riscriverlo da capo. tra l'altro non è neanche una versione tanto pulita, a vedersi.
DanieleC88
02-07-2008, 23:28
non ci sono errori nel codice, solo che nell'output non stampa le stringhe in maniera ordinata
Quindi... ci sono errori nel codice. :asd:
wingman87
03-07-2008, 10:32
Non potresti usare la qsort offerta dalla libreria? LINK (http://www.cplusplus.com/reference/clibrary/cstdlib/qsort.html)
Misciu87
03-07-2008, 13:52
Lo devo fare cosi e io so per certo che con gli interi questa versione di quicksort funziona, io devo solo cambiarlo in modo che funzioni con i char..
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.