我知道Stack Overflow上有无数的HeapSort方法,但是没有一个方法一定能帮助我完成我正在做的事情。
我有点想法什么是堆,我只是不知道如何获取这些值并将它们分类以将它们存储到数组中。
因此,我的指令如下:静态堆排序(Comparable[],int)方法应该对数组执行“就地”排序(从最低值到最高值)。第二个参数指示数组中填充元素的数量。若要“将 [数组] 本身视为最大堆”,此方法可以创建一个本地 MaxHeap优先级队列实例,并将第一个参数分配给 elementData,将第二个参数分配给大小。由于数据从索引 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];
}
}
这个算法是建立在我的笔记上的,但是我主要纠结于我在这个方法的第一行注释的内容。我提供了与这个方法相关的另外两个类。我也有其他的方法,但是正如我之前在指令中提到的,父类,左类,右类,等等。不会被使用。然而,有人提到尝试创建两个私有的helper方法,比如私有的E removeSort()和私有的void bubbleDown(int index)方法。
这就是它。
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();
}
}
问题内容: 由于Java泛型的实现,因此不能有以下代码: 如何在保持类型安全的同时实现此目的? 我在Java论坛上看到了这样的解决方案: 但是我真的不知道发生了什么。 问题答案: 我不得不问一个问题:您的GenSet“已选中”还是“未选中”?那是什么意思? 检查:强打字。GenSet明确地知道什么类型的包含对象(即它的构造是明确要求有Class 参数,当他们通过了类型不是参数的方法会抛出异常E。见
我试图创建一个由子类定义的对象数组(我认为这是正确的术语)。我可以看到这个问题反复出现,但实现仍然存在问题。 我的代码 给出错误 线程“main”java.lang.NullPointerException中出现异常。 为了使其合理化,我将其分解为最简单的术语: 这似乎奏效了。我只是看不出我的两个例子有什么不同。我知道我的第一个没有意义,但是MyClass最终会包含更多的数据。) 我很肯定这个问题
我正在做算法的中期审查,我试图用Java实现所有的伪代码,以便更好地理解算法。但是在堆排序部分,我的代码有一些问题。我的输入数组是 {10,16,4,10,14,7,9,3,2,8,1} 第一个元素只是表示我想要排序的元素的数量。换句话说,需要排序的元素从索引1开始。 我的build max heap输出是:16 14 10 8 7 9 3 2 4 1 堆排序的输出是:1 3 2 4 7 8 9
本文向大家介绍堆排序实例(Java数组实现),包括了堆排序实例(Java数组实现)的使用技巧和注意事项,需要的朋友参考一下 堆排序:利用大根堆 数组全部入堆,再出堆从后向前插入回数组中,数组就从小到大有序了。 堆排序:对数组进行构造堆(最大堆) 以上这篇堆排序实例(Java数组实现)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
问题内容: 我正在为学校进度设计基于文本的冒险游戏。我将每个“级别”设置为一个类,并将每个可探索区域(节点)设置为相应类中的一个方法。 困扰我的是从一个节点移动到另一个节点的代码。由于每个节点最多连接四个其他节点,因此我必须在每种方法中重复一个极为相似的代码块。 我更愿意做的是在每个节点的开头包含一个方法数组,如下所示: 然后将该数组发送到通用方法,然后将播放器发送到正确的节点: 我简化了代码,但
我有一个JSON数组: 结果为“数据”: 我怎么能有一个升序按“datesurder”? THX