Ragazzi io ho il seguente codice(partizionamento di un array)
Praticamente devo fare la versione iterativa dell'algoritmo di quick sort:
codice:
#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");
}
Purtroppo non partiziona completamente, qualcuno può aiutarmi, grazie