http://pt.wikipedia.org/wiki/Merge_sort#Java 该代码无法编译。
谢谢。
答案 0 :(得分:1)
在posicao
的调用中使用System.arraycopy
时出现范围错误。在mesclar
方法的开头声明该变量(而不是在底部的for循环内部)将使其编译,但这并不一定意味着逻辑良好。此外,for循环中的嵌套if语句不能用于这样的赋值。嵌套的三元运算符可以解决问题,但是如果有其他人理解它,那就太好了。相反,vetor[inicio + posicao]
的分配应该在每个if块内重复。
答案 1 :(得分:1)
这是http://rosettacode.org/wiki/Merge_sort#Java的一个有效实现,链接到英文维基百科关于合并排序的文章。
import java.util.LinkedList;
public class Merge<E extends Comparable<? super E>> {
public LinkedList<E> mergeSort(LinkedList<E> m){
if(m.size() <= 1) return m;
int middle= m.size() / 2;
LinkedList<E> left= new LinkedList<E>();
for(int i= 0;i < middle;i++) left.add(m.get(i));
LinkedList<E> right= new LinkedList<E>();
for(int i= middle;i < m.size();i++) right.add(m.get(i));
right= mergeSort(right);
left= mergeSort(left);
LinkedList<E> result= merge(left, right);
return result;
}
public LinkedList<E> merge(LinkedList<E> left, LinkedList<E> right){
LinkedList<E> result= new LinkedList<E>();
while(!left.isEmpty() && !right.isEmpty()){
//change the direction of this comparison to change the direction of the sort
if(left.peek().compareTo(right.peek()) <= 0) result.add(left.remove());
else result.add(right.remove());
}
result.addAll(left);
result.addAll(right);
return result;
}
}
答案 2 :(得分:0)
您必须将其包装在类定义中并在main方法中调用它。然后它将编译并运行。