代码之家  ›  专栏  ›  技术社区  ›  alansiqueira27

有人知道如何修复这种合并排序吗?

  •  -2
  • alansiqueira27  · 技术社区  · 14 年前

    http://pt.wikipedia.org/wiki/Merge_sort#Java 这段代码不能编译。

    谢谢您。

    3 回复  |  直到 14 年前
        1
  •  1
  •   gdejohn    14 年前

    这是一个来自 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
  •  1
  •   gdejohn    14 年前

    使用时出现范围错误 posicao 打电话给 System.arraycopy . 在 mesclar 方法(而不是在底部的for循环中)将使其编译,但这并不一定意味着逻辑良好。此外,for循环中的嵌套if语句不能用于这样的赋值。嵌套的三元运算符可以做到这一点,但祝你好运,让别人理解它。相反,分配给 vetor[inicio + posicao] 应该在每个if块中复制。

        3
  •  0
  •   Teja Kantamneni    14 年前

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