Sto provando a implementare in C la funzione RandomizedSelect. Il programma viene compilato, ma non funziona. Potreste indicarmi l'errore?
Per brevità, ho omesso le funzioni di input/output dell'array.codice:#include <stdio.h> #include <malloc.h> void stampa(int *,int); void input(int *,int); void selectionsort(int *,int); void scambia(int *, int *); int partition(int *,int,int); int select(int *,int,int,int); int main(){ int size,pos; int *v; printf("Dammi la dimensione dell'array: "); scanf("%d",&size); v=(int*)malloc(size*sizeof(int)); input(v,size); stampa(v,size); printf("\nDammi la posizione da processare: "); scanf("%d",&pos); printf("La posizione nell'array ordinato e': %d",select(v,0,size-1,pos)); return 0; } int select(int* v,int p,int q,int i){ int r,k; if(p==q){ return v[p]; } printf("\nSelect..."); r=partition(v,p,q); k=r-p+1; if(i<=k){ return select(v,p,r,i); } else { return select(v,r+1,q,i-k); } } int partition(int *v,int p,int q){ int i,j,r; printf("Partition...\n"); i=p-1; r=v[q]; for(j=p;j<=q;j++){ if(v[j]<=r){ i++; scambia(&v[i],&v[j]); } } return i; }
EDIT: il programma non funziona nel senso che restituisce risultati sballati. Ho provato a confrontare il mio algoritmo con le dispense del corso, ma non quadra.

Rispondi quotando