Ragazzi io ho il seguente codice(partizionamento di un array)
Praticamente devo fare la versione iterativa dell'algoritmo di quick sort:
Purtroppo non partiziona completamente, qualcuno può aiutarmi, graziecodice:#include <stdio.h> #include <stdlib.h> #include <time.h> #define DIM 10 /* Inizio definizioni */ void swap(int *a, int *b); void print_array(int *bar, int enne2); void random_array(int *, int); void partizione(int *, int, int,int); int main(void){ int array[DIM], boh=0, boh2=0; srand(time(NULL)); random_array(array, DIM); partizione(array, 0, DIM-1,(DIM/2)); print_array(array,DIM); } /* Inizio funzioni */ void partizione(int *foo, int left, int right, int middle){ /* Partiziona un array secondo un pivot*/ int pivot = foo[middle], i = left, j = right, temp; /* Trova i primi candidati da scambiare*/ while((i<j)&&(foo[i]<=pivot))i++; while((i<j)&&(pivot<foo[j]))j--; if(foo[j]>pivot) j--; printf("Il pivot è %d\n", pivot); while(i<j){ printf("Scambiamo foo[%d] = %d con foo[%d] = %d \n", i, foo[i], j, foo[j]); swap(&foo[i], &foo[j]); i++;j--; while(foo[i]<=pivot){i++;} while(foo[j]>pivot){j--;} } } void swap(int *a, int *b){ int t; t = *a; *a = *b; *b = t; } void random_array(int *foobar, int enne){ /* Genera vettore random */ int i; for(i=0;i<enne;i++){ foobar[i] = (rand()%10)+1; } print_array(foobar, enne); } void print_array(int *bar, int enne2){ int i; for(i=0;i<enne2;i++){ printf("%d\t", bar[i]); } printf("\n"); }

Rispondi quotando