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.