public int portition(int[] nums,int left,int right) {
int key = nums[left];
int i = left;
int j = right;
while(i<j) {
if(nums[j]>key) {
if(nums[i]<key) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}else {
i++;
}
}else {
j--;
}
}
int tmp = nums[left];
nums[left] = nums[i];
nums[i] = tmp;
return i;
}
public int findKth(int[] nums,int left,int right,int k) {
if(left>right) return -1;
int pos = portition(nums,left,right);
if(pos-left+1 == k) return nums[pos];
else if(pos-left+1 < k) {
return findKth(nums,pos+1,right,k-(pos-left+1));
}else {
return findKth(nums,left,pos-1,k);
}
}