Buongiorno a tutti è il mio primo post,vi scrivo per un piccolo problema che mi sta facendo sclerare da 3 giorni;in un esercizio mi si chiede di implementare la funzione di partizione per poi successivamente utilizzarla nel quicksort;il mio problema è proprio questa funzione di partizione.
La funzione prende come parametri l'array da ordinare,l'indice dell'elemento pivot in base al quale spostare tutti gli elementi più piccoli a sinistra e più grandi a destra(ovviamente l'indice deve essere compreso fra gli estremi),l'estremo sinistro e l'estremo destro e restituisce l'indice della posizione del pivot alla fine dell'ordinamento.
Io l'ho scritta così:

int partiziona(int a[],int i,int l,int r){
int pivot=a[i];
while(l<r){
while(a[l]<pivot)
l=l+1;
while(pivot<a[r])
r=r-1;
if(l<r){
int tmp=a[l];
a[l]=a[r];
a[r]=tmp;
}
}
return l;
}

testata su un array qualsiasi funziona a patto che nell'array non vi siano valori uguali al pivot,altrimenti va in stallo.Mi sono quindi accorto che la funzione andava ovviamente in stallo in quanto avrei dovuto scrivere <= e non < ma se provo ad effettuare questa modifica la funzione non ordina correttamente in base al pivot e restituisce quindi un valore sbagliato anche nel caso di array con tutti gli elementi diversi.Le ho provate di tutte sapreste dirmi cosa c'è da aggiungere per farla funzionare? Sono nelle vostre mani...