【发布时间】:2014-12-19 17:08:16
【问题描述】:
我正在编写一个合并排序来与其他各种类型的排序进行比较,由于某种原因,它的运行速度比预期的要慢得多。这是代码的相关部分:
private static <E extends Comparable<E>> void merge (E[] array, int leftBottom, int leftTop, int rightBottom, int rightTop){
@SuppressWarnings("unchecked")
E[] middleMan = (E[]) Array.newInstance(array.getClass().getComponentType(), array.length+1);
int leftFlag = leftBottom;
int rightFlag = rightBottom;
int flag = leftBottom;
int elements = (rightTop - leftBottom + 1);
while ((leftFlag <= leftTop) && (rightFlag <= rightTop)){
if (array[leftFlag].compareTo(array[rightFlag])<=0){
middleMan[flag++] = array[leftFlag++];
}
else{
middleMan[flag++] = array[rightFlag++];
}
}
while (leftFlag <= leftTop){
middleMan[flag++] = array[leftFlag++];
}
while (rightFlag <= rightTop){
middleMan[flag++] = array[rightFlag++];
}
for (int i = 0; i < elements; i++){
array[rightTop] = middleMan[rightTop];
rightTop--;
}
}
我怀疑原因是因为“middleMan”被创建为与“array”相同的大小,无论我递归地变得多小,但我想不出任何其他方法来做到这一点(包括使用 rightTop - leftBottom + 1 作为长度,返回错误)。有人有什么想法吗?
【问题讨论】:
-
这有点难读。
-
您要我编辑它吗?很抱歉,不知道如何让它变得更好
标签: java performance merge mergesort