Ragazzi nella procedure Partion quando assegno gli indici i e j nn riesco a spiegarmi xkè li assegna fuori al vettore...vi rigrazio anticipatamente




// Quicksort: ordina A[p]...A[r] (p<=f)
void quickSort(int a[], int p, int f , int scelta)
{
int q;
if(p<f) {
q = Partition(a,p,f,scelta);
quickSort(a,p,q,scelta);
quickSort(a,q+1,f,scelta);
}
}







int Partition(int a[], int p, int f,int scelta)
{

int x,scambio;
int i,j;
if (scelta==0) { // se la variabile scelta è 0 allora si avrà il pivot random altrimenti quello fisso al primo elemento
i = (rand()%(f-p)+p); // posizione random
x = a[i]; // pivot
}
else { x=a[p];} // pivot bloccato all'elemento di partenza dell'array

i= p-1; j= f+1; // inizializza indici

for(; {
while(a[--j]>x); // esce se a[j]<=x
while(a[++i]<x); // esce se a[i]>=x

if(i<j) {
// scambia a[i] <-> a[j]
scambio=a[i]; a[i]=a[j]; a[j]=scambio;
}
else break;
}
return j;
}