发生了异常
来源:1-3 实现归并过程
Star3327752
2022-01-21 22:06:45

我自己写了代码之后发现发生了异常,和老师的代码对比后没有找到异常,而且将老师的代码复制进去之后也出现了同样的异常
源代码如下
相关代码:
package 递归排序;
import java.util.Arrays;
public class mergesort2 {
private mergesort2(){}
public static <E extends Comparable<E>> void sort(E[] arr){
sort(arr, 0, arr.length - 1);
}
private static <E extends Comparable<E>> void sort(E[] arr, int l, int r){
if (l >= r) return;
int mid = l + (r - l) / 2;
sort(arr, l, mid);
sort(arr, mid + 1, r);
merge(arr, l, mid, r);
}
// 合并两个有序的区间 arr[l, mid] 和 arr[mid + 1, r]
private static <E extends Comparable<E>> void merge(E[] arr, int l, int mid, int r){
E[] temp = Arrays.copyOfRange(arr, l, r + 1);
int i = l, j = mid + 1;
// 每轮循环为 arr[k] 赋值
for(int k = l; k <= r; k ++){
if(i > mid){
arr[k] = temp[j - l]; j ++;
}
else if(j > r){
arr[k] = temp[i - l]; i ++;
}
else if(temp[i - l].compareTo(temp[j - l]) <= 0){
arr[k] = temp[i - l]; i ++;
}
else{
arr[k] = temp[j - l]; j ++;
}
}
}
public static void main(String[] args){
Integer arr[]= {1203,321,123,421,213,3524,213,42,231,321,213,352,421,321};
MergeSort.Sort(arr);
for(int n:arr) {
System.out.print(n+" ");
}
}
}1回答
liuyubobobo
2022-01-22
我使用课程代码测试了你的数据,没有问题。请你使用这里的代码在你的本地环境再做一次测试:https://git.imooc.com/class-105/Play-Algorithms-and-Data-Structures/src/master/09-MergeSort/04-MergeSort/src/MergeSort.java
你的截图里的错误发生在 MergeSort 类里,但是你的文件是 mergesort2,请看一下你是否错误执行了 MergeSort,而真正的错误是在 MergeSort 中。
继续加油!:)