2010-11-26 17 views

Répondre

1

Voici une implémentation de travail de http://rosettacode.org/wiki/Merge_sort#Java, liée à l'article de Wikipédia en anglais sur le tri par fusion.

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; 
    } 
} 
0

Vous devez l'inclure dans une définition de classe et l'appeler dans une méthode principale. Ensuite, il sera à la fois compiler et exécuter.

+0

non ils ne veulent pas: P – Seva

1

Il y a une erreur de portée en utilisant posicao dans l'appel à System.arraycopy. Déclarer cette variable au début de la méthode mesclar (plutôt que dans la boucle for en bas) l'amènera à compiler, mais cela ne signifie pas nécessairement que la logique est bonne. De même, les instructions if imbriquées à l'intérieur de cette boucle for ne peuvent pas être utilisées pour une affectation comme celle-ci. Les opérateurs ternaires imbriqués feraient l'affaire, mais bonne chance que quelqu'un d'autre le comprenne. Au lieu de cela, l'affectation à vetor[inicio + posicao] doit être dupliquée dans chaque bloc if.

+1

C'est un exemple de code .... ne prenez pas cela comme une classe entièrement mis en œuvre. –

+0

Je ne le prenais pas comme une classe entièrement implémentée. Il échoue juste comme un échantillon de code. – gdejohn