给定一无序整型数组a,在不排序的情况下,查找第k小的元素
类似快排。
如果k非常小比如小于3,觉得应该用几个临时变量然后遍历一遍解决。
public class MinKth {
public static int calculate(int[] array, int k) {
return calculate(array, k, 0, array.length - 1);
}
public static int calculate(int[] array, int k, int low, int high) {
int target = array[low];
int i = low;
int j = high;
while (i < j) {
while (i <= high && array[i] <= target) {
i++;
}
while (j >= low && array[j] > target) {
j--;
}
if (i < j) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
int tmp = array[j];
array[j] = array[low];
array[low] = tmp;
int gap = i - low + 1;
if (gap > k)
return calculate(array, k, low, i - 1);
if (gap < k)
return calculate(array, k - gap, i + 1, high);
else
return array[i];
}
}