PDA

View Full Version : [C] Problema Quicksort


phoneix86
04-06-2009, 09:52
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;
}

gugoXX
04-06-2009, 10:47
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.

phoneix86
05-06-2009, 14:55
tu cosa mi suggerisci?

gugoXX
05-06-2009, 16:20
tu cosa mi suggerisci?

Per fare cosa?

phoneix86
05-06-2009, 16:43
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

gugoXX
05-06-2009, 16:52
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?

phoneix86
05-06-2009, 17:38
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...