void randomizedQuickSort(vectoru32& v, u32 p, u32 r) { if ( p < r ) { u32 q = randomizedPartition(v, p, r); if (q != 0) randomizedQuickSort(v, p, q - 1); randomizedQuickSort(v, q + 1, r); } }
int selectKthOrder(int * arr, int start, int end, int k) { if(arr == NULL || start > end || k < start || k > end) { perror("args error"); return -1; } int pivot = randomizedPartition(arr, start, end); if(pivot > k) return selectKthOrder(arr, start, pivot-1, k); if(pivot < k) return selectKthOrder(arr, pivot+1, end, k); return arr[pivot]; }
void quickSort(int * arr, int start, int end){ if(arr == NULL) { perror("args error"); } if(start < end){ int pivot = randomizedPartition(arr, start, end); quickSort(arr, start, pivot - 1); quickSort(arr, pivot + 1, end); } }
// select i-st largest number from A[p] to A[r] Distance randomizedSelect(Distance* A, int p, int r, int i) { if (p == r) return A[p]; int q = randomizedPartition(A, p, r); int k = q - p + 1; if (i == k) // the pivot value is the answer return A[q]; else if (i < k) // on the left return randomizedSelect(A, p, q-1, i); else // on the right return randomizedSelect(A, q+1, r, i-k); }