public void Sort(int[] a, int l, int h) { if (l < h) { int rp = Helper.RandomPartition(a, l, h); Sort(a, l, rp - 1); Sort(a, rp + 1, h); } }
private int KthLargestHelper(int[] a, int l, int h, int k) { while (l <= h) { int rp = Helper.RandomPartition(a, l, h); if (rp == k) { return(rp); } if (rp > k) { return(KthLargestHelper(a, l, rp, k)); } else { return(KthLargestHelper(a, rp + 1, h, k)); } } return(-1); }
private int KthSmallestHelper(int[] a, int l, int h, int k) { if (l <= h) { int rp = Helper.RandomPartition(a, l, h); if (rp == k) { return(rp); } if (rp > k) { // Search left return(KthSmallestHelper(a, l, rp - 1, k)); } else { return(KthSmallestHelper(a, rp + 1, h, k - rp)); } } return(-1); }