Hat jemand weiß, wie man diese Merge Sort zu beheben?
Frage
http://pt.wikipedia.org/wiki/Merge_sort#Java Dieser Code nicht kompiliert werden.
Danke.
Lösung
Hier ist eine Arbeits Implementierung von http://rosettacode.org/wiki/Merge_sort#Java , aus dem englischen Wikipedia-Artikel über Mergesort verknüpft.
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;
}
}
Andere Tipps
Es gibt einen Umfang Fehler posicao
in dem Aufruf von System.arraycopy
verwenden. Deklarieren diese Variablen am Anfang der mesclar
Methode (anstatt innerhalb der for-Schleife an der Unterseite) erhalten, es zu kompilieren, aber das bedeutet nicht unbedingt die gute Logik. die verschachtelt Auch, wenn Anweisungen innerhalb der for-Schleife nicht für die Zuordnung wie die verwendet werden können. Verschachtelte ternäre Operatoren würde den Trick tun, aber viel Glück mit jemand anders es verstehen. Stattdessen sollte die Zuordnung zu vetor[inicio + posicao]
in jedem wenn Block dupliziert werden.
Sie haben, dass innerhalb einer Klassendefinition wickeln und rufen Sie es in einem Hauptverfahren. Dann wird es sowohl kompilieren und ausführen.