Sto provando a implementare in C la funzione RandomizedSelect. Il programma viene compilato, ma non funziona. Potreste indicarmi l'errore?
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;
}
Per brevità, ho omesso le funzioni di input/output dell'array.
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.