|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Feb 2005
Città: napoli
Messaggi: 274
|
[C] Problema Quicksort
ho un piccolo problema con il quicksort in quanto nn riesco a capire xkè alla voce inizializza gli indici gli dà quell range ! qualcuno può spiegarm xkè?
int Partition(int a[], int p, int f) { int x,scambio; int i,j,b; i = (rand()%(f-p)+p); x = a[i]; // pivot i= p-1; j= f+1; // inizializza indici printf("mostrami il pivot %d",x); for(; ![]() while(a[--j]>x) ; // esce se a[j]<=x while(a[++i]<x) ; // esce se a[i]>=x if(i<j) { scambio=a[i]; a[i]=a[j]; a[j]=scambio; } else break; } return j; }
__________________
Ho concluso felicmente con : tonyy , raizen89,enricoerfico Il mio Dragon_Heart : Case Cooler Master Centution T01 ,MoBo Asus M4785td , CPU AMD Phenom II 965BE 4.0Ghz ,2 X HD WD 1TB Green 32MB,Ram Corsair 3x2GB 1333MHZ ,Asus ENGTX460 DCU 1GB Monitor Samsung T220 .... Phoneix86 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Perche' e' ottimizzato da fare schifo.
C'e' l'operatore di preincremento e predecremento nell'algoritmo, quindi occorre assegnare inizialmente indici fuori range. Oppure e' uno schifo di ottimizzazione, vedi tu cosa preferisci.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 04-06-2009 alle 10:49. |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Feb 2005
Città: napoli
Messaggi: 274
|
tu cosa mi suggerisci?
__________________
Ho concluso felicmente con : tonyy , raizen89,enricoerfico Il mio Dragon_Heart : Case Cooler Master Centution T01 ,MoBo Asus M4785td , CPU AMD Phenom II 965BE 4.0Ghz ,2 X HD WD 1TB Green 32MB,Ram Corsair 3x2GB 1333MHZ ,Asus ENGTX460 DCU 1GB Monitor Samsung T220 .... Phoneix86 |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Feb 2005
Città: napoli
Messaggi: 274
|
ho provato a fare così solo ke va in loop infinito
i= p; j= f; // inizializza indici printf("mostrami il pivot %d",x); for(; { while(a[j]>x) j-- ; // esce se a[j]<=x while(a[i]<x) i++ ; // esce se a[i]>=x
__________________
Ho concluso felicmente con : tonyy , raizen89,enricoerfico Il mio Dragon_Heart : Case Cooler Master Centution T01 ,MoBo Asus M4785td , CPU AMD Phenom II 965BE 4.0Ghz ,2 X HD WD 1TB Green 32MB,Ram Corsair 3x2GB 1333MHZ ,Asus ENGTX460 DCU 1GB Monitor Samsung T220 .... Phoneix86 |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Non ho capito cosa devi fare.
Devi fare una funzione di qsort, comunque essa sia, ed usarla in un tuo programma, oppure devi scrivere una funzione di qsort perche' qualcuno deve correggertela?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Feb 2005
Città: napoli
Messaggi: 274
|
la procedure di qsort scritta da me funziona(ho preso spunta da alcune dispense)...solo ke nn riesco a capire il perchè di quelle assegnazioni...
__________________
Ho concluso felicmente con : tonyy , raizen89,enricoerfico Il mio Dragon_Heart : Case Cooler Master Centution T01 ,MoBo Asus M4785td , CPU AMD Phenom II 965BE 4.0Ghz ,2 X HD WD 1TB Green 32MB,Ram Corsair 3x2GB 1333MHZ ,Asus ENGTX460 DCU 1GB Monitor Samsung T220 .... Phoneix86 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:12.