运行时期间的Heapsort错误

时间:2013-11-14 16:25:28

标签: runtime-error heapsort

这是我用Java创建的一个heapsort程序,但我遇到了一个不能运行的问题。

我在编译过程中没有收到任何错误,这使得错误难以识别,但是如果我在提取最大函数中注释掉大小减量,程序将会运行,所以我假设它在哪里错误是。不幸的是,这条线对于计划正常运作至关重要。

如果有任何简单导致此问题,或者需要对程序进行重大调整,我想知道这两种方式。

欢迎所有输入。

更新 增加了主要功能。 现在可以复制并粘贴代码以便运行。

公共课Heap {

private int [] data;
private int [] fin;
private int size;
private int tmp = 0;

/**
 * Constructor for objects of class Heap
 */
public Heap(int[] A)
{
    data = A;
    size = data.length;
    fin = new int [size];
    this.buildHeap(0);
    for(int n = size - 1; n >= 0; n--)
    {
        fin[n] = this.extractMax();
    }
}

public int getSize()
{
    return size;
}

private void setSize(int i)
{
    size = i;
}

public void print()
{
    for(int i = 0; i < this.getSize(); i++)
    System.out.printf("%d\n", fin[i]);
}

/**
 * build heap using top down method
 *  
 * @param  i   the index of the node being built upon
 */
private void buildHeap(int i)
{
    if(i <= (size - 2)/2)
    {
        buildHeap(2*i + 1);
        buildHeap(2*i + 2);
        heapify(i);
    }
}

/**
 * Extract maximum number
 * 
 * @return maximum number of heap
 */
private int extractMax()
{
    int n = size;
    int store = 0;
    store = data[0];
    data[0] = data[n - 1];
    size--;
    this.heapify(0);
    return store;
}

/**
 * Heapify array
 * 
 * @param  i  the index to heapify upon
 */
private void heapify(int i)
{
    if(2*i + 1 < size && data[2*i + 1] > data[i])
    {
        if(2*i + 2 < size && data[2*i + 2] > data[2*i + 1])
        {
            this.exchange(i, 2*i + 2);
            heapify(2*i + 2);
        }
        else
        {
            this.exchange(i, 2*i + 1);
            heapify(2*i + 1);
        }
    }
    if(2*i + 2 < size && data[2*i + 2] > data[i])
    {
        this.exchange(i, 2*i + 2);
        heapify(2*i + 2);
    }
}

private boolean exchange(int i, int k)
{
    tmp = data[i];
    data[i] = data[k];
    data[k] = tmp;
    return true;
}

public static void main(String [] args)
{
    int [] arr = {5,13,2,25,7,17,20,8,4};
    Heap heapsort = new Heap(arr);
    heapsort.print();
}

}

0 个答案:

没有答案