/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param a int整型一维数组
* @param aLen int a数组长度
* @param n int整型
* @param K int整型
* @return int整型
*/
void swap(int* a, int * b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int* a, int low ,int high, int k) {
int mid = low + (high - low) / 2;
swap(&a[mid], &a[low]);
int v = a[low];
int i = low + 1;
int j = high;
while(true) {
while(j >= low + 1 && a[j] < v){
j--;
}
while(i <= high && a[i] > v) {
i++;
}
if(i > j){
break;
}
swap(&a[i], &a[j]);
i++;
j--;
}
swap(&a[low], &a[j]);
if(j + 1 == k) {
return a[j];
}
else if(j + 1 < k) {
return partition(a, j + 1, high, k);
} else {
return partition(a, low, j - 1, k);
}
}
int findKth(int* a, int aLen, int n, int K ) {
// write code here
return partition(a, 0, n - 1, K);
}