我正在尝试创建一个堆排序类,我得到了这个错误
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;
}
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我的问题是什么,我该怎么做才能解决它?
在你的代码的问题是,它假设数组中的初始指数1,最后指数是a.length,包容性.例如:
for(int i = a.length ; i <= 2 ; i--)
Run Code Online (Sandbox Code Playgroud)
这是不正确的.Java数组索引从零开始,然后转到a.length,独占.这行代码应如下所示:
for(int i = a.length-1 ; i >= 1 ; i--)
// The condition is inverted, too: i <= 2 should be i >= 1
Run Code Online (Sandbox Code Playgroud)
代码中你做出相同假设的另一个地方需要修复如下:
for (int i = n/2 ; i>=1 ; i--)
// should be i >= 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |