【发布时间】:2018-05-01 15:29:48
【问题描述】:
我创建了一个类来管理一个以 ArrayList 作为参数的优先级队列。我需要做一个最大堆,所以如果我执行以下插入:16、9、7、8、4、14、1、3、2、10,我需要在这些位置获得一个包含这些元素的 ArrayList:{16 , 9, 14, 7, 4, 8, 10, 3, 2, 1}。问题是我的插入方法看起来没有对元素进行排序:
public void insert(T elem) {
int i = queue.size();
int parentIndex = (int) Math.floor((i - 1) / 2);
while (i > 0 && elem.compareTo(queue.get(parentIndex)) == 1) {
queue.set(i, queue.get(parentIndex));
i = parentIndex;
parentIndex = (int) Math.floor((i - 1) / 2);
}
queue.add(i, elem);
}
示例:插入(16)、插入(14)、插入(9)。预期数组:{16,9,14}。结果:{16,14,9}。
【问题讨论】:
-
那么你得到了什么输出?编辑您的问题以显示输入、预期输出和实际输出。
-
问题已编辑。