堆排序 - ArrayIndexOutOfBoundsException -java

时间:2015-12-25 15:09:11

标签: java

我正在尝试创建一个堆排序类,我收到此错误

  

java.lang.ArrayIndexOutOfBoundsException

这是我的代码

package heap_sort;

public class main {

    public static void main(String[] args) {
        int a[]={16,4,10,14,7,9,3,2,8,1};
        heapsort(a);

    }
public static void heapsort(int a[])
{
    build_max_heap(a);
    for(int i = a.length ;i<=2 ;i--)
    {
        a[1]=a[i];
        max_heapify(a,1,i-1);
    }

}
public static void build_max_heap(int a[])
{
    int n=a.length;
    for (int i =n/2 ;i>=1 ;i--)
    {
        max_heapify(a,i,n);
    }
}
public static void max_heapify(int a[],int i , int n)
{
    int L=i*2;
    int R=(i*2)+1;
    int Largest=i;
    if (L<=n && a[L] > a[i])

    Largest=L;


    if (R>=n && a[R]>a[Largest])
    {
        Largest=R;
    }
    if (Largest != i)
        Changing(a,i,Largest);
    max_heapify(a,Largest,n);
}
public static void Changing (int a[],int i,int LL)
{
    int T=a[i];
    a[i]=a[LL];
    a[LL]=T;
}
}

有谁能告诉我我的问题是什么,我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:5)

代码中的问题是它假定数组中的初始索引为1,最后一个索引为a.length包含。例如:

for(int i = a.length ; i <= 2 ; i--)

这是不正确的。 Java数组索引从零开始,然后转到a.length独占。这行代码应如下所示:

for(int i = a.length-1 ; i >= 1 ; i--)
// The condition is inverted, too: i <= 2 should be i >= 1

代码中您做出相同假设的另一个地方需要修复如下:

for (int i = n/2 ; i>=1 ; i--)
// should be i >= 0