Inoltre non effettuavi correttamente lo swap degli elementi, ho corretto il codice:
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;
}
Tu invece hai scritto :
codice:
int temp1=i+1;
a[i+1]=a[r];
a[r]=a[temp1];
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.