Mergesort im Java-Code

February 23

Sortieren von Listen mit Daten stellt eines der schwierigeren Probleme für Computerprogrammierer, da es schwer ist zu konzipieren und implementieren effiziente Sortier-Algorithmen in Programmiersprachen. Sortieren erfordert beträchtliche kopieren, verschieben und Auslesen der Daten arbeiten. Dementsprechend konzentrieren sich Programmierer auf die Entwicklung von effizienter und generischer Sortieralgorithmen. Eins von diesen, die Merge-Sort, durch Teilung einer Liste mit Werten über und über rekursiv auf "Teile und herrsche" funktioniert das Problem. Da Merge Sort als generische Lösung gedacht ist, haben die meisten Sprachen wie Java, Möglichkeiten, es zu implementieren.

Zusammenführen von Klasse

Ein Merge-Sort nimmt eine Liste sortiert werden und rekursiv teilt die Liste bis zum Erreichen von single-Werten, z. B. einzelne Zahlen. Die Sortierung setzt dann die Nummern sortiert, schließlich wieder eine sortierte Liste. Eine einfache Sortierung Klasse in Java werden enthalten eine Liste zu sortieren, und rufen eine Haupt-Zusammenführung Sortierfunktion, die sie definiert:

Klasse Merge {}

public void [] X;

publicstaticvoid Main (String [] Args) {}

x = [5, 6, 3, 4, 7, 8, 10, 2];

MergeSort (x, 0, x.length-1);

}}

Zusammenführen der Sortierfunktion

Außerhalb die Haupt-Klasse wird eine Merge-Sort-Funktion befinden. Diese Funktion Segmente einen Bereich von Zahlen in der Liste zu sortieren. Zunächst in diesem Bereich wird die gesamte Liste darstellen, aber da die Merge-Sort weiter, es dauert nur die Hälfte der Liste bis zum Erreichen der einzelnen Einträge. Dann wird die Merge-Sort-Funktion Elemente zusammenzusetzen, in großen Listen, die sind sortiert (Quelle 2):

public void MergeSort (Int niedrig, Int hi) {}

Wenn (niedrige < Hallo) {}Int Mitte = (gering + Hallo) / 2;MergeSort (niedrig, Mittel);MergeSort (Mitte + 1, Hallo);Merge (niedrig, Mitte, hi);}}

Grundlegende Merge-Funktion

Die Merge-Funktion werden zwei Listen kombinieren, nach dem sie sortieren. Wenn die Funktion einzelner Elemente erhält, wird es ihnen bestellen. Andernfalls wird es zwei separate Listen zu nehmen und je nach dem Wunsch des Programmierers bestellen in aufsteigender oder absteigender Reihenfolge:

private void Merge (Int niedrig, Int Mitte, Int hi) {}

Int [] Kopie = new Int [x.length-1];

Beide Teile in der Helfer-Array Kopierenfür (Int i = niedrig; i < = hi; i++) {}Kopie [i] = x [i];}

Int i = niedrig;Int j = Mitte + 1;Int k = niedrig;

während (ich < = Mitte & & j < = hi) {}Wenn (Kopie [i] < = copy[j]) {}x [k] = kopieren [i];i++;} else {}x [k] = kopieren [j];j++;}k++;}Kopieren Sie den Rest des linken Rands des Arrays in das Ziel-arraywährend (ich < = Mitte) {}x [k] = kopieren [i];k++;i++;}

}

Art-Recurse zusammenführen

Die "MergeSort" Funktion rekursiv teilt die Liste. Zunächst teilt es die ursprüngliche Liste in der Mitte jedes Mal sie sich selbst rekursiv aufruft. Wenn die Rekursion eine einzelne Zahl erreicht, wird die Funktion dann backtracks und fängt an, die Liste zu sortieren. Jedes Mal, wenn die Funktion in einem vorherigen Funktionsaufruf backtracks verbindet es zwei Hälften einer kleineren Liste schließlich zurück zu der vollständigen Liste arbeiten. Die Funktion "Seriendruck" scheint die Schwerarbeit zu tun, und Werte in der Liste zu kopieren, aber das Herz einer Merge-Art ist in der trügerisch einfach "MergeSort"-Funktion.