Quick select
Finds kth smallest element in an unsorted list/array
Find kth largest:
int left=0, right = nums.length-1;
while(left < right) {
int pivotIndex = partition(nums, left, right);
if (pivotIndex == k-1)
return nums[pivotIndex];
else if (pivotIndex < k-1)
left = pivotIndex+1;
else
right = pivotIndex-1;
}
return nums[left];
Partition function:
Quick select partition function: