如何在Java中为数组创建HeapSort方法?

如何在Java中为数组创建HeapSort方法?,java,arrays,algorithm,heap,heapsort,Java,Arrays,Algorithm,Heap,Heapsort,我知道在堆栈溢出上有无数的HeapSort方法,但是没有一种方法一定能帮助我完成我的工作 我对堆有点概念,只是不知道如何获取这些值并对它们进行排序以将它们存储到数组中 因此,我的说明是:静态heapSort(Comparable[],int)方法应该对数组执行“就地”排序(从最低值到最高值)。第二个参数表示 数组中的填充元素。要“将[数组]本身视为最大堆”,此方法可以创建一个本地MaxHeapPriorityQueue实例,并将第一个参数分配给elementData,第二个参数分配给size。因

我知道在堆栈溢出上有无数的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];
    }
}
公共类MaxHeapPriorityQueue
{
私有E[]元素数据;
私有整数大小;
@抑制警告(“未选中”)
public MaxHeapPriorityQueue()
{
elementData=(E[])新可比[10];
尺寸=0;
}
公共静态空堆堆(可比[]a,整数大小)
{
MaxHeapPriorityQueue元素数据=新的MaxHeapPriorityQueue();
//PriorityQueue pq=新的PriorityQueue();
适用于(可比n:a)
{
elementData.add(n);
}
对于(int i=0;i
这个算法建立在我的笔记上,但是我主要是在与我在方法的第一行上的评论做斗争。我提供了与这个方法相关的另外两个类。我也有其他方法,但正如我在前面的说明中所说的,父类、左类、右类等将不被使用。然而,有一个错误尝试创建两个私有帮助器方法,例如private E removeSort()和private void bubbleDown(int index)方法的过程。

在中,您尝试将某些内容分配给
PriorityQueue
。假设这是
java.util.PriorityQueue
,则没有(java)除非某个类扩展了
java.util.PriorityQueue

即使从1.5开始,他们也没有指定接口,而是指定了类


截至,
MaxHeapPriorityQueue.heapSort(a,size)
不执行
就地排序
。没有类与
heapSort(a,size)
绑定

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();
    }
}

您的“说明”的措辞与我的预期不同。
MaxHeapPriorityQueue
是众所周知的吗?一个“实例”如何分配“参数”?什么是“其他私人助手方法”?不逐个插入项。也就是说,我发现Java的泛型很难处理。@greybeard详细说明一下,我不知道这是什么意思。(在中,我在方法的第一行上的注释由于没有注释而相当神秘。)当引用源代码中的名称时,将它们放在
`
“backticks”中我发现像
leftChild()这样修饰方法成员很有帮助
。哦,好吧,但是你对那一行有什么建议,因为如果我弄明白了那一行,我就可以找出整个算法来完成它。好吧,我在上面编辑了我的代码,我注释了我以前用过的一行,但是我现在唯一的问题就是把它全部排序成算法。我有两个私人助手方法,例如private E removeSort()和private void bubbleDown(int index)方法。我仍然不确定如何使用这些方法,但如果我对它们有问题,我会问一个问题。到目前为止,当我运行测试时,它只是说它未排序。