0

Java で作成したヒープソート プログラムを次に示しますが、実行できないという問題があります。

コンパイル中にエラーが発生しないため、エラーを特定するのが難しくなりますが、extract maximum 関数でサイズの減少をコメントアウトすると、プログラムが実行されるので、そこにエラーがあると思います。残念ながら、その行はプログラムが正しく機能するために重要です。

この問題の原因となる単純なものがある場合、またはプログラムに大幅な調整が必要な場合は、いずれかを知りたいです。

すべての入力を歓迎します。

メイン機能を追加したアップデート。コードをコピーして貼り付けて実行できるようになりました。

パブリック クラス ヒープ {

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

}

4

0 に答える 0