首页 > 解决方案 > Java中的合并排序越界异常

问题描述

在我的第二个 for 循环中出现错误。关于我做错了什么有什么建议吗?也许我没有使阵列足够大?

private static void mergeSort(int length, int[] arr) {
    if (length>1)
    {
        int h = (int) Math.floor(length/2);
        int m = length-h;
        int[] U= new int[h];
        int[] V=new int[m];

        for(int i=0; i<h; i++){
            U[i]=arr[i];
        }
        for(int i=h; i<length; i++){
            V[i]=arr[i];
        }
        mergeSort( h , U);
        mergeSort(m ,V);
        merge(h , m , U , V, arr);
    }

标签: javamergemergesort

解决方案


    for(int i=h; i<length; i++){
        V[i]=arr[i];
    }

您期望 V 在分配它之后的“长度”小于那个值。

    int m = length-h;

    int[] V=new int[m];

但我在评论中支持你学习一点调试技巧的建议。


推荐阅读