Sto cercando di creare, nel linguaggio C, il programma quick-sort in maniera ricorsiva.
Ho scritto il codice e a livello logico mi torna tutto solo che quando faccio partire il programma mi fa solo aggiungere gli elementi all'array e poi mi da errore...
il codice è il seguente:
#include <stdio.h>
void quicksort (int a[],int p,int r);
void partition (int a[],int p,int r);
int main () {
int i;
int *a;
int n;
printf ("quanti posti ha l'array? ");
scanf ("%d",&n);
a=(int*)malloc(n*sizeof(int));
for (i=0; i<n; i++) {
printf ("al posto %d = ",i+1);
scanf ("%d",&a[i]);
}
printf ("\n\n--------------------\n\n");
quicksort (a,0,n);
for (i=0; i<n; i++) {
printf ("ORA al posto %d = %d",i+1,a[i]);
}
return main();
}
void quicksort (int a[],int p,int r) {
int q;
if (p<r) {
q=partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}
void partition(int a[],int p,int r) {
int x=a[r];
int t=p-1;
int temp;
int j;
int q;
for (j=p; j<r-1; j++) {
if (a[j]<=x) {
t++;
temp=a[t];
a[t]=a[j];
a[j]=temp;
}
}
temp=a[t+1];
a[t+1]=a[r];
a[r]=temp;
return t+1;
}
dove ho sbagliato??