当前位置:  开发笔记 > 编程语言 > 正文

堆排序 - ArrayIndexOutOfBoundsException -java

如何解决《堆排序-ArrayIndexOutOfBoundsException-java》经验,为你挑选了1个好方法。

我正在尝试创建一个堆排序类,我得到了这个错误

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> dasblinkenli..:

在你的代码的问题是,它假设数组中的初始指数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

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有