// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
Real_t BFReconstructionEngine::RandomizedSelect(RealArrayType::Pointer A, uint32_t p, uint32_t r, uint32_t i)
{
  uint32_t start = p;
  uint32_t end = r;
  uint32_t q;
  do
  {
    q = RandomizedPartition(A, start, end);
    if (i == q)
    { return A->d[i]; }
    else if  (i < q)
    {
      //start = p;
      end = q - 1;
    }
    else
    {
      start = q + 1;
      //end = r;
    }
  }
  while(i != q);

  return A->d[i];
}
void RandomQuicksort(int64_t* A, int64_t p, int64_t r)
{
    if (p < r)
    {
        int64_t q = RandomizedPartition(A, p, r);
        RandomQuicksort(A, p, q - 1);
        RandomQuicksort(A, q + 1, r);
    }
}
Beispiel #3
0
void RandomizedQuickSort(int array[],int start,int end)
{
	int q;
	if(start<end)
	{
		q=RandomizedPartition(array,start,end);
		RandomizedQuickSort(array,start,q-1);
		RandomizedQuickSort(array,q+1,end);
	}
}
Beispiel #4
0
 int RandomizedSelect(std::vector<int> & nums, int start, int end, int i)
 {
     if (nums.empty())   return 0;
     if (start == end)   return nums[start];
     int mid = RandomizedPartition(nums, start, end);
     int k = mid - start + 1;
     if (i == k)
         return nums[mid];
     else if (i < k)
         return RandomizedSelect(nums, start, mid - 1, i);
     else
         return RandomizedSelect(nums, mid + 1, end, i - k);
 }
Beispiel #5
0
int QuickSortIter(int* arr, int start, int last)
{
	if(arr == NULL )
	{
		fputs("Input Array Error!", stderr);
		return 1;
	}
	if(start >= last)
	{
		return 0;
	}
	int pivot = RandomizedPartition(arr, start, last);
	QuickSortIter(arr, start, pivot - 1);
	QuickSortIter(arr, pivot + 1, last);
	return 0;
}
Beispiel #6
0
int SelectionIter(int* arr, int start, int last, int k)
{
	if(start >= last)
	{
		return arr[start];
	}

	int pivot = RandomizedPartition(arr, start, last);
	if(pivot == k)
	{
		return arr[pivot];
	}
	else if(pivot > k)
	{
		return SelectionIter(arr, start, pivot - 1, k);
	}
	else
	{
		return SelectionIter(arr, pivot + 1, last, k);
	}
}
Beispiel #7
0
int64_t RandomizedSelect(int64_t* A, int64_t p, int64_t r, int64_t i)
{
    if (p == r)
    {
        return A[p];
    }
    int64_t q = RandomizedPartition(A, p, r);
    int64_t k = q - p + 1;
    if (i == k)
    {
        return A[q];
    }
    else if (i < k)
    {
        return RandomizedSelect(A, p, q - 1, i);
    }
    else
    {
        return RandomizedSelect(A, q + 1, r, i - k);
    }
}