发生了异常
来源: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 中。
继续加油!:)