1.根据快排中使用的分治法partition函数进行判断。
A.如果partition返回值index<k,那么在索引index+1 -> high使用分治法。
B.如果partition返回值index>=k,那么在索引low -> index-1使用分治法。
C.直到index = k - 1,返回下标为k-1数字。
时间复杂度O(n),空间复杂度O(1)。但是这种方法改变了数组中数字的位置。。
public class Main {
public static void topk1(int[] input, int k) {
if(input.length == 0){
System.out.println("input.length == 0!!");
return;
}
if(k>input.length){
System.out.println("k > input.length!!");
return;
}
int index = partition(input, 0, input.length-1);
while(index != k - 1){
if(index > k-1)index = partition(input, 0, index-1);
if(index < k-1)index = partition(input, index+1, input.length-1);
}
for (int i = 0; i < k; i++) {
System.out.println(input[i]);
}
}
public static int par