gpt4 book ai didi

java - 使用堆排序对数组进行排序

转载 作者:行者123 更新时间:2023-12-01 18:54:06 25 4
gpt4 key购买 nike

class HeapSort{
public static void main(String args[]){
int A[]={6,5,4,3,2,1};
HeapSor obj=new HeapSor(6);
obj.Heap_Sort(A);
obj.print(A);
}
}


class HeapSor{

int lenOfArray;
int HeapSize;

HeapSor(int len){
this.lenOfArray=len;
this.HeapSize=len;
}

void Heap_Sort(int A[]){
for(int i=0; i<lenOfArray; i++){
BuiltHeap(A);
HeapSize--;
swap(A,i,lenOfArray-i);
}
}

void BuiltHeap(int A[]){
for(int i=lenOfArray/2; i>=0; i--)
MaxHeapify(A,i);
}

void MaxHeapify(int A[],int i){
int l=2*i;
int r=2*i+1;
int max=i;

if(i>HeapSize)
return;
if(A[l]>A[r])
max=l;
else
max=r;

if(A[i]<A[max])
swap(A,i,max);
//max=i;
}

void swap(int A[],int i,int j){
if(i==j)
return;

int temp=A[i];
A[i]=A[j];
A[j]=temp;
}

void print(int A[]){
for(int i=0; i<lenOfArray; i++)
System.out.print(A[i]+" ");

System.out.println();
}
}

当我编译时,它给了我这个错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at HeapSor.MaxHeapify(HeapSort.java:41)
at HeapSor.BuiltHeap(HeapSort.java:31)
at HeapSor.Heap_Sort(HeapSort.java:23)
at HeapSort.main(HeapSort.java:5)

我真的很努力现在出了什么问题,但我失败了,有人可以告诉我我出了什么问题吗?

抱歉我的英语不好

最佳答案

有两个问题要开始(还会有更多)。

1) Java 不是 C。使用 A.length 计算 A 的长度,而不传递单独的变量。

2) 你对 l 和 r 的计算被破坏了。您传入 6/2 = 3 然后得到 2*32*3+1 (67)作为您的索引。这些都无效。

关于java - 使用堆排序对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14761379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com