/**
*
* 寻找最大的K个数
*
*/
public class FindMaxKNumHeap {
/**
*
* @param a 要排序数组
* @param i 堆排序中
* @param length 传递要排序的长度,建成小顶堆后将数组第一个和最后一个元素互换,再从第一个元素开始调整到倒数第二个元素,以此类推
*/
public static void headAdjust(int[] a, int i, int length) {
if (a.length <= 0 || length <= 0)
return;
int temp = a[i];
int pos = i;
for (int j = 2 * i + 1; j < length; j = j * 2 + 1) {
if (j + 1 < length && a[j] > a[j + 1]) {
j++;
}
if (temp < a[j]) {
break;
}
a[pos] = a[j];
pos = j;
}
a[pos] = temp;
}
public static void main(String[] args) {
int[] a = {4,6,4,8,1,2,6,7,8,3,2,1};
/*从第一个不是叶子节点的节点调整堆*/
for (int i = a.length / 2 - 1; i >= 0; i--) {
headAdjust(a, i, a.length);
}
/*测试数据*/
int k = 10;
/*比最小的元素大,替换a[0]*/
if (k > a[0]) {
a[0] = k;
headAdjust(a, 0, a.length);
}
for (int i : a) {
System.out.print(i + " ");
}
}
}
寻找最大的K个数
最新推荐文章于 2022-04-01 21:28:36 发布