gpt4 book ai didi

java - Mergesort 数组索引越界异常

转载 作者:行者123 更新时间:2023-11-30 11:28:02 24 4
gpt4 key购买 nike

package merge;
public class Merger {
int[] a = {1, 10, 5, 9};
// int[] a = {1, 10, 5, 9, 8, 6, 3, 2};
public Merger(){
mergSort(a,0,3);
for(int i =0; i<a.length;i++){
//System.out.println(a[i]);
}
}

private void mergSort(int[] a, int l, int r) {
if(l>=r){
return;
}
int m=(l+r)/2;
mergSort(a,l,m);
mergSort(a,m+1,r);
merge(a,l,m,r);
}

private void merge(int[] a, int l, int m, int r) {
int p = l;
int u = l;
int v = m + 1;
int n = (r-l) + 1;
int[] result = new int[n];
int s = 0;

while(p <= r){
if(u>v){
s = a[v];
v = v + 1;
} else if (v>r){
s = a[u];
u = u + 1;
} else {
if(a[u]<a[v]){
s = a[u];
u = u + 1;
} else {
s = a[v];
v = v + 1;
}
}
result[p] = s;
p = p + 1;
}
copy(result, a, l, r);
}

private void copy(int[] result, int[] a, int l, int r) {
for(int i = l; i <= r; i++){
a[i] = result[i];
}
}

public static void main(String[] args) {
Merger m = new Merger();
}

}

我一直在 result[p] = s 行抛出一个 ArrayIndexOutOfBoundsException。我认为这可能与最终合并有关,但我不确定。当我将结果数组的大小硬编码为数组 a 的大小时,我的程序可以运行。我不确定发生了什么。我将不胜感激

最佳答案

result 数组大小合适,但您没有正确索引它。您使用 l 作为起始索引,但数组的第一个可用位置为 0,而 l 可能大于零。您需要从 p 中减去 l 才能使索引正常工作。

result[p-l] = s;

for(int i = l; i <= r; i++){
a[i] = result[i-l];
}

关于java - Mergesort 数组索引越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19040131/

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