堆可以被视为一棵完全二叉树,每个节点的值都比其子节点大。
由于是完全二叉树,可以方便的用数组来表示堆,以及实现堆的各种操作(插入,取出最大值,建堆)
本代码用一维数组实现堆
目录
1.编写测试程序
测试插入
import java.util.*;
public class test {
public static void main(String[] args) {
{// 测试插入
MaxHeap test1 = new MaxHeap();
System.out.println(test1.insert(100));
System.out.println(test1.insert(50));
System.out.println(test1.insert(51));
System.out.println(test1.insert(200));
System.out.println(test1.insert(70));
System.out.println(test1.insert(150));
System.out.println(test1.insert(300));
System.out.println("{300,100,200,50,70,51,150}:answer should be ");
test1.printMaxHeap();
System.out.println();
for(int i = 0; i < 9; i++) {
if (i != 0) {
System.out.print(",");
}
test1.deleteMax();
}
System.out.println();
System.out.println();
}
{// 测试取出最大值
MaxHeap test1 = new MaxHeap();
test1.printMaxHeap();
System.out.println();
test1.deleteMax();
System.out.print(",");
System.out.println();
System.out.println();
}
{// 用数组建堆(之前测试的一开始是空堆)
int[] testArray = {16,21,75,38,2,50,85,19,61,82};
MaxHeap test1 = new MaxHeap(testArray);
test1.printMaxHeap();
System.out.println();
test1.deleteMax();
}
}
}
2.变量初始化,创建构造器
两种建堆方式,一种是建空堆,一种是用已知数据建堆(先把数据载入堆,再调用建堆方法)
class MaxHeap {
int maxSize = 100;//堆的最大大小
int[] array = new int[maxSize+1];
int nowSize = 0;//目前堆使用的部分的大小
public MaxHeap() {
array[0] = Integer.MAX_VALUE;
}
public MaxHeap(int[] inputArray) {
int inputArrayLength = inputArray.length;
nowSize = inputArrayLength;
array[0] = Integer.MAX_VALUE;
for (int i = 1; i <= inputArrayLength; i++) {
array[i] = inputArray[i-1];
}
buildMaxHeap();
}
//其它方法
}