我知道Stack Overflow上有不计其数的HeapSort方法,但是并不一定能帮助我完成我的工作。
我有点了解堆是什么,我只是不知道如何获取这些值并将其分类以将它们存储到数组中。
因此,我的指令读为:静态heapSort(Comparable [],int)方法应执行数组的“就地”排序(从最低值到最高值)。第二个参数表示 填充数组中的元素。为了“将数组本身作为最大堆进行处理”,此方法可以创建一个本地MaxHeapPriorityQueue实例,并将第一个参数分配给elementData,将第二个参数分配给size。由于数据从索引0开始,因此您可能无法使用大多数其他私有帮助器方法。方法完成后,将对array参数进行排序。
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)方法。
答案 0 :(得分:2)
在revision 1中,您尝试为PriorityQueue<>
分配内容。 假设为java.util.PriorityQueue<>
,除非存在扩展java.util.PriorityQueue<>
的类,否则没有(Java)方法可以工作:
即使是since 1.5
,他们也没有指定接口,而是指定了一个类。
从revision 2开始,MaxHeapPriorityQueue.heapSort(a, size)
不会执行an "in-place" sort
。没有课程与捆绑在一起 heapSort(a, size)
。
答案 1 :(得分:0)
这就是它。
public static void heapSort(Comparable[] a, int size)
{
MaxHeapPriorityQueue mhpq = new MaxHeapPriorityQueue();
mhpq.elementData = a;
mhpq.size = size;
for (int i = (size/2)-1; i >= 0; i--)
{
mhpq.bubbleDown(i);
}
for(int i = size-1; i >= 0; i--)
{
a[i] = mhpq.sortRemove();
}
}