用sort的方法就不写了,没有什么意义
下面代码为堆排序的解法
思路都在代码注解中了,用堆挺简单的,还是调用API,没什么要说的
注意要重优先队列的比较方法
public int[] getLeastNumbers(int[] arr, int k) {
if (k == 0){
return new int[0];
}
/** 创建一个大根堆,size为k,将数组元素存入堆中,
* 如果比堆顶还要到,就直接跳过,
* 如果比堆顶小,就将堆底弹出,将该数放出堆中*/
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>((v1,v2) -> v2 - v1);
for (int i :
arr) {
if (priorityQueue.size() < k) priorityQueue.add(i);
else if (priorityQueue.peek() > i){
priorityQueue.poll();
priorityQueue.add(i);
}
}
/** 取出对顶元素*/
int[] result = new int[priorityQueue.size()];
int i = 0;
for (int res:
priorityQueue) {
result[i++] = res;
}
return result;
本文介绍了使用Java实现堆排序的详细过程,通过创建一个大根堆并不断调整堆来找出最小的k个数。代码注释清晰,着重讲解了如何利用优先队列(PriorityQueue)进行堆排序,并强调了比较方法的重要性。适用于理解堆排序原理及Java编程实践。
275

被折叠的 条评论
为什么被折叠?



