publicstaticinthelper(int[] array, int start, int end, int k) { // Should never be reached unless k is greater than array.length if (start > end) return -1; intpivot= 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]; elseif (right < k - 1) return helper(array, right + 1, end, k); else return helper(array, start, right - 1, k); }
publicstaticvoidswap(int[] array, int i, int j) { inttemp= array[i]; array[i] = array[j]; array[j] = temp; } }
classProgram { publicstaticintquickselect(int[] array, int k) { // Write your code here. return helper(array, 0, array.length - 1, k); }
publicstaticinthelper(int[] array, int start, int end, int k) {
while (true) { // Should never be reached. if (start > end) return -1; intpivot= 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]; elseif (right < k - 1) start = right + 1; else end = right - 1; } }
publicstaticvoidswap(int[] array, int i, int j) { inttemp= array[i]; array[i] = array[j]; array[j] = temp; } }