堆排序-ArrayIndexOutOfBoundsException-java
我试图创建一个堆排序类,但我得到了这个错误 java.lang.ArrayIndexOutOfBoundsException 这是我的密码堆排序-ArrayIndexOutOfBoundsException-java,java,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 heaps
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;
}
}
package-heap\u-sort;
公共班机{
公共静态void main(字符串[]args){
int a[]={16,4,10,14,7,9,3,2,8,1};
希普索尔(a);
}
公共静态void堆端口(int a[])
{
构建最大堆(a);
对于(int i=a.length;i=1;i--)
{
max_heapify(a,i,n);
}
}
公共静态void max_heapify(int a[],int i,int n)
{
int L=i*2;
int R=(i*2)+1;
int=i;
if(la[i])
最大=L;
如果(R>=n&&a[R]>a[最大])
{
最大=R;
}
如果(最大!=i)
变化(a、i、最大);
最大值(a,最大值,n);
}
公共静态无效更改(int a[],int i,int LL)
{
int T=a[i];
a[i]=a[LL];
a[LL]=T;
}
}
有人能告诉我我的问题是什么,我应该怎么解决吗?代码中的问题是,它假设数组中的初始索引是
1
,最后一个索引是a.length
,包含在内。例如:
for(int i = a.length ; i <= 2 ; i--)
代码中您做出相同假设的另一个地方需要固定如下:
for (int i = n/2 ; i>=1 ; i--)
// should be i >= 0
代码中的问题是,它假定数组中的初始索引是
1
,而最后一个索引是a.length
,包括这两个索引。例如:
for(int i = a.length ; i <= 2 ; i--)
代码中您做出相同假设的另一个地方需要固定如下:
for (int i = n/2 ; i>=1 ; i--)
// should be i >= 0
@谢谢,我错过了这个倒装@luk2302您认为哪种情况mean@luk2302我仍然得到相同的错误后,修复这2conditions@luk2302谢谢,我错过了这个倒装@luk2302您认为哪种情况mean@luk2302在修复这两个条件后,我仍然会得到相同的错误