import java.util.*; public class Main{ public static void main(String[] args){ int arr[] = {6,2,7,1,3,5,6}; int res = findKthLarge(arr,0,arr.length-1, 4); System.out.println(res); } private static int findKthLarge(int arr[], int left, int right, int k){ int pos = partition(arr, left, right); int rightLen = right-pos+1; if (rightLen==k) return arr[pos]; else if (rightLen>k) return findKthLarge(arr, pos+1, right, k); else return findKthLarge(arr, left, pos-1, k-rightLen); } private static int partition(int arr[], int left, int right){ int pivot = arr[left]; while (left<right){ while (left<right && arr[right]>=pivot) right--; swap(arr, left, right); while (left<right && arr[left]<pivot) left++; swap(arr, left, right); } arr[left] = pivot; return left; } private static void swap(int arr[], int a, int b){ int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } }