// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- 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); } }
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); } }
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); }
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; }
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); } }
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); } }