1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| class Solution { public static int quickselect(int[] array, int k) { return helper(array, 0, array.length - 1, k); }
public static int helper(int[] array, int start, int end, int k) { if (start > end) return -1; int pivot = start, left = start + 1, right = end; while (left <= right) { if (array[left] > array[pivot] && array[right] < array[pivot]) { swap(array, left, right); left += 1; right -= 1; continue; } if (array[left] <= array[pivot]) { left += 1; } if (array[right] >= array[pivot]) { right -= 1; } } swap(array, pivot, right); if (right == k - 1) return array[right]; else if (right < k - 1) return helper(array, right + 1, end, k); else return helper(array, start, right - 1, k); }
public static void swap(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } }
|