【发布时间】:2019-09-29 09:37:42
【问题描述】:
我知道 Stack Overflow 上有无数的 HeapSort 方法,但没有一个能帮助我完成我的工作。
我有点了解堆是什么,我只是不知道如何获取这些值并将它们排序以将它们存储到数组中。
因此,我的指令是:静态 heapSort(Comparable[], int) 方法应该对数组执行“就地”排序(从最低值到最高值)。第二个参数表示数量 填充数组中的元素。为了“将 [数组] 本身视为一个最大堆”,此方法可以创建一个本地 MaxHeapPriorityQueue 实例,并将第一个参数分配给 elementData,将第二个参数分配给 size。因为数据从索引 0 开始,您可能无法使用大多数其他私有帮助方法。当方法完成后,数组参数将被排序。
public class MaxHeapPriorityQueue<E extends Comparable<E>>
{
private E[] elementData;
private int size;
@SuppressWarnings("unchecked")
public MaxHeapPriorityQueue()
{
elementData = (E[]) new Comparable[10];
size = 0;
}
public static void heapSort(Comparable[] a, int size)
{
MaxHeapPriorityQueue elementData = new MaxHeapPriorityQueue();
//PriorityQueue<Comparable> pq = new PriorityQueue();
for (Comparable n : a)
{
elementData.add(n);
}
for (int i = 0; i < size; i++)
{
a[i] = elementData.remove();
}
}
public class MHPQIterator implements java.util.Iterator<E>
{
private int index;
public boolean hasNext()
{
if(size == 0)
{
return false;
}
else
{
return (index < size);
}
}
public E next()
{
index++;
return elementData[index];
}
}
这个算法是建立在我的笔记上的,但是我主要是在努力解决我在方法第一行的评论。我提供了与此方法相关的另外两个类。我也有其他方法,但正如我在前面的说明中所述,不会使用 parent、leftChild、rightChild 等。然而,有人提到尝试创建两个私有辅助方法,例如私有 E removeSort() 和私有 void bubbleDown(int index) 方法。
【问题讨论】:
-
您的“说明”措辞不是我所期望的。
MaxHeapPriorityQueue是不是众所周知? “实例”如何分配“参数”?什么是“ 其他私有辅助方法”? Floyd's variation 不 逐一插入项目。也就是说,我发现 Java 的泛型性很笨拙。 -
@greybeard 详细点,我不知道那是什么意思。
-
(在revision 2 中,我在方法的第一行中评论的内容由于缺少该评论而相当神秘。)
-
当引用源代码中的名称时,将它们放在
`“反引号”中会很明显。我发现装饰像leftChild()这样的方法成员很有帮助。
标签: java arrays algorithm heap heapsort