发生了异常

来源:1-3 实现归并过程

Star3327752

2022-01-21 22:06:45

https://img.mukewang.com/climg/61eabdb209b82f6325601600.jpg

我自己写了代码之后发现发生了异常,和老师的代码对比后没有找到异常,而且将老师的代码复制进去之后也出现了同样的异常

源代码如下

相关代码:

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 中。


继续加油!:)

0
hiuyubobobo
回复
htar3327752
hp>else if(temp[i-l].compareTo(temp[j-1])<=0)  你把 l 写成了 1。

h022-01-22
共2条回复

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2610 学习 · 1087 问题

查看课程

相似问题

回答 1

回答 1

回答 1

回答 2

回答 1