gpt4 book ai didi

algorithm - 关于LSD基数排序的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:34:56 25 4
gpt4 key购买 nike

我有以下代码:

public class LSD{
public static int R=1<<8;
public static int bytesword=4;
public static void radixLSD(int a[],int l,int r){
int aux[]=new int[a.length];

for (int d=bytesword-1;d>=0;d--){
int i, j;
int count[]=new int[R+1];
for ( j=0;j<R;j++) count[j]=0;
for (i=l;i<=r;i++)
count[digit(a[i],d)+1]++;
for (j=1;j<R;j++)
count[j]+=count[j-1];
for (i=l;i<=r;i++)
aux[count[digit(a[i],d)]++]=a[i];
for (i=l;i<=r;i++)
a[i]=aux[i-1]; // <-- Line 19
}
}

public static void main(String[]args){
int a[]=new int[]{3,6,5,7,4,8,9};
radixLSD(a,0,a.length-1);

for (int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}

public static int digit(int n,int d){
return (n>>d)&1;
}
}

在运行时它会抛出以下异常:

java.lang.ArrayIndexOutOfBoundsException: -1
at LSD.radixLSD(LSD.java:19)
at LSD.main(LSD.java:29)

为什么会这样?

最佳答案

我对基数排序知之甚少,无法知道您的代码应该是什么,但它目前失败的原因非常清楚。您正在调用 radixLSD 并为 l 传递 0:

radixLSD(a,0,a.length-1);

当你看到这段代码时:

for (i=l;i<=r;i++)
a[i]=aux[i-1];

在第一遍中,i设置为l(0),你尝试做aux[i-1],或 aux[-1],这是越界

关于algorithm - 关于LSD基数排序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2941749/

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