计算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++
,因为这是唯一一个实际比较两个条目的地方。当前位置用于计算整数移动的次数,这不是您需要的。