Пример #1
0
    InputIterator RandomSelect(InputIterator begin, InputIterator end,  InputIterator I)
    {
        InputIterator endElemt = end;
        InputIterator beginElemt = begin;
        --endElemt;

        if (beginElemt  == endElemt)
            return beginElemt;

        InputIterator pos = RandomizedPartions(begin, end);
        if (pos > I){
            return RandomSelect(begin, pos, I);
        }else if (pos < I){
            return RandomSelect(++pos, end, I);
        }
            return pos;
    }
Пример #2
0
wgttype RandomSelect(wgttype *a, int start, int end, int i)
{
	int q,k,j;
	if (start==end)
		return a[start];
	
	q=RandomPartition(a,start,end);

//	printf("After rand partition, q:%d, end:%d\n",q,end);
/*	for(j=start;j<=end;j++)
		printf("%f,",a[j]);
	printf("\n");
	abort();
*/
	k=q-start+1;
	if (k==i)
		return a[q];
	if (i < k )
		return RandomSelect(a,start,q-1,i);
	else
		return RandomSelect(a,q+1,end,i-k);
}