题
http://pt.wikipedia.org/wiki/merge_sort#java该代码不编译。
谢谢你。
解决方案
这是来自 http://rosettacode.org/wiki/merge_sort#java, ,与英文Wikipedia文章有关合并的链接。
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;
}
}
其他提示
有一个示波器错误使用 posicao
在电话中 System.arraycopy
. 。在开始时声明该变量 mesclar
方法(而不是底部的for循环内部)将其编译,但这并不一定意味着逻辑的好处。另外,嵌套的if语句在该循环中不能用于这样的分配。嵌套的三元操作员会做到这一点,但是祝其他人理解它。相反,分配给 vetor[inicio + posicao]
如果块,则应在每个块内重复。
您必须将其包裹在类定义中,并以主方法调用。然后它将既编译又运行。
不隶属于 StackOverflow