/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @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);
}