我正在尝试创建一个堆排序类,我收到此错误
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;
}
}
有谁能告诉我我的问题是什么,我该怎么做才能解决它?
答案 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