剑指offer30 输出最小k个数

public class Test{
public static void main(String[] args) {
solution(new int[] {3,4,5,13,7,2,9,8,7},5);
}
public static void solution(int[]arr,int k) {
if(arrnull||k<=0||k>arr.length) {
return;
}
int left=0;
int right=arr.length-1;
int keyIndex=sort(arr, left, right);
while(keyIndex!=k-1) {
if(keyIndex>k-1) {
right=keyIndex-1;
keyIndex=sort(arr, left, right);
}else {
left=keyIndex+1;
keyIndex=sort(arr, left, right);
}
}
for(int i=0;i<=keyIndex;i++) {
System.out.print(arr[i]+" ");
}
}
public static Integer sort(int[]arr,int left,int right) {
if(arr
null) {
return null;
}
int i=left;
int j=right;
int key=arr[left];
while(i<j) {
while(i<j&&arr[j]>=key) {
j–;
}
arr[i]=arr[j];
while(i<j&&key>=arr[i]) {
i++;
}
arr[j]=arr[i];
}
arr[i]=key;
return i;
}
}

猜你喜欢

转载自blog.csdn.net/qq_33391981/article/details/92375006
今日推荐