Java 实现最小堆的构建堆方法时出现的问题
我正在尝试使用最小堆算法,并且我能够使用insert、delete、pop、trickleUp和trickleDown方法,但是我在使用构建堆算法的构造函数方面遇到了问题 这个方法很简单,因为它只是想从数组中构建一个新的堆。此外,我将实现堆排序算法,该算法需要heapify()来维护heap属性。但是,如果构造函数是正确的,我会被卡住,因此不确定我的heapify()是否正确。一旦构造函数工作,堆排序将很容易实现Java 实现最小堆的构建堆方法时出现的问题,java,min-heap,Java,Min Heap,我正在尝试使用最小堆算法,并且我能够使用insert、delete、pop、trickleUp和trickleDown方法,但是我在使用构建堆算法的构造函数方面遇到了问题 这个方法很简单,因为它只是想从数组中构建一个新的堆。此外,我将实现堆排序算法,该算法需要heapify()来维护heap属性。但是,如果构造函数是正确的,我会被卡住,因此不确定我的heapify()是否正确。一旦构造函数工作,堆排序将很容易实现 /** Construct a new heap from an array of
/** Construct a new heap from an array of unsorted data.
*
* Complexity: O(n)
* @param data Array to populate the heap from
* @param capacity Capacity of the heap (must be >= data.length)
* @param comparator Comparator to use when comparing elements
*/
MinHeap(T[] data, int capacity) {
for(int i = data.length/2 + 1; i >= 0;i--){
heapify(data,i);
}
}
public void heapify(Comparable[] data,int i){
int smallest = i;
if(size >left(i) && data[left(i)].compareTo(data[i])< 0 )
{
smallest = left(i);
}
else{
smallest = i;
}
if(size>right(i) && data[right(i)].compareTo(data[i])< 0)
{
smallest = right(i);
}
if(smallest !=i)
{
Comparable temp = data[i];
data[i] = data[smallest];
data[smallest] = temp;
heapify(data,smallest);
}
}
您没有包含randomArray()的代码 假设此方法使随机化数组的大小等于该方法的参数,则调用
Integer[] data = randomArray(0);
生成大小为0的数组
无法读取索引0处的元素,因为大小为0的数组没有元素。我忘记添加randomArray();我用代码编辑了我的帖子。所以,randomArray()使数组等于方法,所以测试有问题,不是程序有问题,对吗?
testArrayConstruction caused an Error: 0
java.lang.ArrayIndexOutOfBoundsException
Integer[] data = randomArray(0);