Inoltre non effettuavi correttamente lo swap degli elementi, ho corretto il codice:
Tu invece hai scritto :codice:#include <stdio.h> #define N 5 int partition(int a[N],int p,int r); void quicksort(int a[N],int p,int r); void quicksort(int a[N], int p, int r){ int q; if(p<=r){ q=partition(a,p,r); quicksort(a,p,q-1); quicksort(a,q+1,r); } } int partition(int a[N], int p, int r){ int x; int i; int j; x=a[r]; i=p-1; for(j=p; j<r; j++){ // qua era sbagliato *********** if(a[j]<=x){ i=i+1; int temp=i; a[i]=a[j]; a[j]=a[temp]; } } int temp1=a[i+1]; a[i+1]=a[r]; // anche qua ************ a[r]=temp1; return i+1; } void stampa(int a[N]){ int i; for(i=0; i<N; i++) printf("%d",a[i]); } int main(){ int a[N]; int i; for(i=0; i<N; i++){ scanf("%d",&a[i]); } printf("ok\n\n"); quicksort(a,1,N-1); stampa(a); return 0; }
Ma in temp1 memorizzavi solo l' indice, non il valore di a[i+1], poi in a[i+1] si scrivevi a[r], e il valore originario di a[i+1] andava perso.codice:int temp1=i+1; a[i+1]=a[r]; a[r]=a[temp1];

Rispondi quotando