我正在实施MergeSort算法,但在从ClassCastException
转换时,我总是得到Object
。
为了比较K
的两个值,我使用了intValue
方法。有没有其他方法来比较它们?
import java.util.Arrays;
public class MergeSort {
private static <K extends Number> K[] sort(K[] s) {
int n = s.length;
if (n == 0 || n == 1)
return null;
int mid = n / 2;
if (n % 2 == 0) {
K[] s1 = (K[]) new Object[n / 2];
K[] s2 = (K[]) new Object[n / 2];
for (int i = 0; i < n / 2; i++) {
s1[i] = s[i];
s2[i] = s[i + n / 2];
}
return merge(sort(s1), sort(s2));
} else {
K[] s1 = (K[]) new Object[n / 2];
K[] s2 = (K[]) new Object[n / 2 + 1];
for (int i = 0; i < n / 2; i++) {
s1[i] = s[i];
s2[i] = s[i + n / 2];
}
s2[n / 2] = s[n - 1];
return merge(sort(s1), sort(s2));
}
}
private static <K extends Number> K[] merge(K[] s1,K[] s2){
int ll, rl;
ll = s1.length;
rl = s2.length;
K[] merge = (K[]) new Object[ll+rl];
int i = 0, j = 0;
while (i + j < ll + rl) {
if (j == rl || (i < ll && (s1[i].intValue() < s2[j].intValue())))
merge[i + j] = s1[i++];
else
merge[i + j] = s1[j++];
}
return merge;
}
}
答案 0 :(得分:0)
关于例外:
您正在sort方法中创建 Object 的数组,然后将其转换为 K 。
但是像这样投射一个数组并没有神奇地将对象变成K个实例。你在这里使用泛型的全部想法并没有意义。尝试首先对Number数组进行排序。
并且:通常你会创造这些&#34; temp&#34;数组仅在合并步骤中。第一次分区数据的临时数组看起来也像是浪费内存。