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] 如果块,则应在每个块内重复。

您必须将其包裹在类定义中,并以主方法调用。然后它将既编译又运行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top