Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现最小堆的构建堆方法时出现的问题_Java_Min Heap - Fatal编程技术网

Java 实现最小堆的构建堆方法时出现的问题

Java 实现最小堆的构建堆方法时出现的问题,java,min-heap,Java,Min Heap,我正在尝试使用最小堆算法,并且我能够使用insert、delete、pop、trickleUp和trickleDown方法,但是我在使用构建堆算法的构造函数方面遇到了问题 这个方法很简单,因为它只是想从数组中构建一个新的堆。此外,我将实现堆排序算法,该算法需要heapify()来维护heap属性。但是,如果构造函数是正确的,我会被卡住,因此不确定我的heapify()是否正确。一旦构造函数工作,堆排序将很容易实现 /** Construct a new heap from an array of

我正在尝试使用最小堆算法,并且我能够使用insert、delete、pop、trickleUp和trickleDown方法,但是我在使用构建堆算法的构造函数方面遇到了问题

这个方法很简单,因为它只是想从数组中构建一个新的堆。此外,我将实现堆排序算法,该算法需要heapify()来维护heap属性。但是,如果构造函数是正确的,我会被卡住,因此不确定我的heapify()是否正确。一旦构造函数工作,堆排序将很容易实现

/** 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);