|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2000
Città: Milano
Messaggi: 136
|
QUICKSORT in C
Ciao ragazzi
ho un problema a usare la funzione 'qsort' delle libreria stlib.h. Allora quello che ho capito io è: qsort('qui ci va il nome dell'array da ordinare','qui la lunghezza','qui la dimensione con size of','qui la funzione che confronta i 2 array tramite i 2 puntatori in entrata') I puntatori gli ho dichiarati gli ho assegnato l'indirizzo iniziale degli array. Nonostante tutto il compilatore mi dice che il puntatore è incompatibile. Vi allego le mie procedure che è meglio int CONFRONTA(int *v1,int *v2) { if(*v1 < *v2) return -1; else if (*v1 == *v2) return 0; else return 1; } void LISTACELLE(){ int *e1,*e2; int B[n],C[n]; CELLA *p; int r,i,z,m; r=0; for(i=0;i<=n;i++) for(p=A[i].next;p->next!=NIL;p=p->next) { r=r+1; B[r]=p->x;} e1=&B[0]; for(z=0;z<=r;z++) {C[z]=z;} e2=&C[0]; qsort(B,r,sizeof(int),CONFRONTA); for(m=0,m<=r,m++) printf('%d %d',B[m],A[i]);}
__________________
athlon xp-m 2400Mhz asus a7n8x-x ati 9800 aiw@9800pro |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
qsort si aspetta una funzione del tipo int (*) (const void *, const void *) mentre CONFRONTA è di tipo int (*) (int *, int *).
Prova con un cast: qsort(B,r,sizeof(int),(int(*)(const void *, const void *)) CONFRONTA);
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2000
Città: Milano
Messaggi: 136
|
grazie mille ho risolto il problema ma potresti spiegarmi cosa significa questa dicitura (int(*)(const void *, const void *).
Il compilatore fa storie sull'ultima riga dove c'è printf secondo me A[i]non va bene (è una variabile globale). Ciao e grazie
__________________
athlon xp-m 2400Mhz asus a7n8x-x ati 9800 aiw@9800pro |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jun 2000
Città: Milano
Messaggi: 136
|
Scusa se rompo ancora ma manca solo un errore e approfitto della tua sapienza.
Sempre tornando ad A io lo ho dichiarato globale ma senza definirlo cioè ho scritto: int A[]; il compilatore mi da errore e mi dice: File1.h:10: warning: array `A' assumed to have one elemente Scusa ancora P.S. Posso contattarti via ICQ? Qualunque sia la tua risposta ti ringrazio comunque
__________________
athlon xp-m 2400Mhz asus a7n8x-x ati 9800 aiw@9800pro |
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:03.



















