gpt4 book ai didi

java - 如何修复合并排序代码中的 "NegativeArraySizeException"?

转载 作者:行者123 更新时间:2023-12-02 01:42:17 27 4
gpt4 key购买 nike

如果要排序的数组包含 10 个及以上元素,则会收到 NegativeArraySizeException。它说它在这行代码“int R[] = new int[n2];” , 我怎样才能解决这个问题?

如果您想知道为什么我的合并排序没有任何其他方法,我的教授特别要求仅在主方法中进行合并排序。这个合并排序是迭代版本,因为我无法将递归版本仅压缩到主方法。

   public static void main(String[] args) 
{
int arr[] = {100,99,98,97,96,95,94,93,92,93};

int n = arr.length;

int curr_size;
int left_start;

for (curr_size = 1; curr_size <= n-1;
curr_size = 2*curr_size)
{
for (left_start = 0; left_start < n-1;
left_start += 2*curr_size)
{

int mid = left_start + curr_size - 1;

int right_end = Math.min(left_start
+ 2*curr_size - 1, n-1);


int i, j, k;
int n1 = mid - left_start + 1;
int n2 = right_end - mid;

/* create temp arrays */
int L[] = new int[n1];
int R[] = new int[n2];

/* Copy data to temp arrays L[]
and R[] */
for (i = 0; i < n1; i++){
L[i] = arr[left_start + i];
}
for (j = 0; j < n2; j++){
R[j] = arr[mid + 1+ j];
}

i = 0;
j = 0;
k = left_start;
while (i < n1 && j < n2)
{
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}


while (i < n1){
arr[k] = L[i];
i++;
k++;
}

while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
}
System.out.printf("\nSorted array is \n");
int i= 0;
for (i=0; i < n; i++){
System.out.print(arr[i]+ " ");

}

}

}

最佳答案

我想我已经解决了。当然适用于给定的数组。尝试一下

  int mid = Math.min(left_start + curr_size - 1, n-1);

而不是

 int mid = left_start + curr_size - 1;

关于java - 如何修复合并排序代码中的 "NegativeArraySizeException"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54294266/

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