No quicksort è una funzione di ordinamento ricorsiva, non una chiamata di sisteme. Esse può ordinare array o liste a seconda di come è implementata.
Se devi riordinare un array di interi questa è la funzione che devi usare:
void swap(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int partition(int vettore[],int begin,int end){
int pivot, l, r;
pivot = vettore[begin];
l = begin+1;
r = end;
while(l <= r){
while(vettore[r] > pivot) r = r-1;
while((vettore[l] <= pivot)&&(l <= r)) l = l+1;
if(l < r){
swap(&vettore[l],&vettore[r]);
l++; (*compl)++;
r--; (*compl)++;
}
}
swap(&vettore[begin],&vettore[r]);
return r;
}
void quicksort(int vettore[],int begin,int end){
int q;
if(begin < end){
q = partition(vettore,begin,end);
quicksort(vettore,begin,q-1);
quicksort(vettore,q+1,end);
}
}
Quicksort oltre a richiamare se stessa richiama anche una funzione di partition che divide l'array in due parti ricorsivamente. In questo modo arriverà ad avere array di sole 2 celle che scambierà richiamando la funzione swap nel caso in cui la prima cella abbia un valore superiore alla seconda.
Per richiama quicksort dovrai passare come parametri:
-int vettore[], cioè il vettore da ordinare;
-int begin, cioè la prima cella dell'array che è = 0;
-int end, cioè la fine dell'array-1 (se dichiare int vettore[n] begin = n-1).