Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算MergeSort Java的比较数 我在计算Java中mergesort的比较次数时遇到问题。下面是我的代码。不确定我是否把它放错了位置,等等。_Java_Mergesort - Fatal编程技术网

计算MergeSort Java的比较数 我在计算Java中mergesort的比较次数时遇到问题。下面是我的代码。不确定我是否把它放错了位置,等等。

计算MergeSort Java的比较数 我在计算Java中mergesort的比较次数时遇到问题。下面是我的代码。不确定我是否把它放错了位置,等等。,java,mergesort,Java,Mergesort,非常感谢您的帮助,谢谢 private static int merge(int[] intArray, int first, int n1, int n2) { int numComparisons = 0; int[] temp = new int[n1+n2]; int copied = 0, copied1 = 0, copied2 = 0; while((copied1 < n1) && (copied2 &

非常感谢您的帮助,谢谢

private static int merge(int[] intArray, int first, int n1, int n2) {
    int numComparisons = 0;
        int[] temp = new int[n1+n2];
        int copied = 0, copied1 = 0, copied2 = 0;
        while((copied1 < n1) && (copied2 < n2)){
            if (intArray[first + copied1] < intArray[first + n1 + copied2]) {
                temp[copied++] = intArray[first + copied1++];
            }
            else {
                temp[copied++] = intArray[first + n1 + copied2++];
            }

        }

        while(copied1 < n1)     {
            temp[copied++] = intArray[first + copied1++];
        }
        while(copied2 < n2)     {
            temp[copied++] = intArray[first + n1 +copied2++];
        }


        for(int i = 0; i < n1+n2; i++) {
            numComparisons++;
            intArray[first + i] = temp[i];  
        }

        return numComparisons;
    }


    public static int mergeSortComparisons(int[] intArray, int first, int last){
        int n1, n2;
        if (last > 1){

            n1 = last/2;
            n2 = last - n1;

            mergeSortComparisons(intArray, first, n1);
            mergeSortComparisons(intArray, first + n1, n2);

            merge(intArray, first, n1, n2);
        }

        return first;
    }
private static int merge(int[]intArray,int first,int n1,int n2){
整数比较=0;
int[]温度=新的int[n1+n2];
int copied=0,copied1=0,copied2=0;
而((复制11){
n1=最后一个/2;
n2=最后一个-n1;
合并比较(intArray,first,n1);
合并比较(intArray、first+n1、n2);
合并(阵列,第一,n1,n2);
}
先返回;
}

如果要计算比较次数,请执行比较步骤,将其重构为一个方法,并插入该方法。您在错误的位置递增
numComparisons

private static boolean lessThan(int[] ia, int leftIndex, int rightIndex) {
    numComparisons++;
    return ia[leftIndex] < ia[rightIndex];
}
private静态布尔lessThan(int[]ia,int leftIndex,int righindex){
numComparisons++;
返回ia[leftIndex]
用它代替
merge
顶部附近的比较行


另外,编写JUnit测试以确保排序工作正常。最后,是否需要让所有方法都是静态的?

如果要计算比较次数,请执行比较步骤,将其重构为一个方法,并对该方法进行工具化。您在错误的位置递增
numComparisons

private static boolean lessThan(int[] ia, int leftIndex, int rightIndex) {
    numComparisons++;
    return ia[leftIndex] < ia[rightIndex];
}
private静态布尔lessThan(int[]ia,int leftIndex,int righindex){
numComparisons++;
返回ia[leftIndex]
用它代替
merge
顶部附近的比较行


另外,编写JUnit测试以确保排序工作正常。最后,您是否需要让所有方法都是静态的?

我将它放在当前函数中的什么位置?我的老师不允许我们为这个做单独的功能@eric jablowThen,在if语句上方插入
numComparisons++
,因为这是唯一一个实际比较两个条目的地方。当前位置用于计算整数移动的次数,这不是您需要的。我应该将其放在当前函数中的什么位置?我的老师不允许我们为这个做单独的功能@eric jablowThen,在if语句上方插入
numComparisons++
,因为这是唯一一个实际比较两个条目的地方。当前位置用于计算整数移动的次数,这不是您需要的。