Sortieren von Listen von Daten stellt eine der schwierigsten Probleme für Computer-Programmierer , weil es schwer ist, zu konzipieren und zu implementieren effiziente Sortierung Algorithmen in Programmiersprachen. Sortieren erfordert erhebliche Kopieren, Verschieben und Lesen von Daten zu arbeiten . Dementsprechend konzentrieren sich Programmierer auf die Entwicklung effizienter und generische Sortieralgorithmen . Einer von ihnen, der Merge sort , funktioniert , indem eine Liste von Werten über und über rekursiv auf "Teile und Herrsche " das Problem. Seit Merge sort als generische Lösung gedacht ist, haben die meisten Sprachen, darunter Java, Möglichkeiten, es zu implementieren. Merge Klasse
Ein Merge sort nimmt eine Liste sortiert werden und teilt rekursiv die Liste bis zum Erreichen einzelne Werte , wie einzelne Zahlen . Die Art rekombiniert dann die Zahlen in sortierter Reihenfolge , schließlich wieder eine sortierte Liste . Eine grundlegende Sortier- Klasse in Java eine Liste zu sortieren enthalten , und rufen Sie einen Haupt verschmelzen Sortierfunktion es definiert :
Klasse Merge {
public int [ ] x ;
public static void main (String [] args ) { x =
[5, 6 , 3, 4 , 7, 8 , 10, 2];
MergeSort (x, 0, x . length-1 ); }}
Merge Sort Funktion
Außerhalb der Hauptklasse befinden wird eine Zusammenführung Sortierfunktion . Diese Funktion Segmenten eine Reihe von Zahlen in der Liste sortieren. Zunächst wird dieser Bereich stellen die gesamte Liste , sondern als die Zusammenführung Art weiter , es wird nur die Hälfte der Liste zu nehmen bis zum Erreichen einzelner Einträge . Dann wird das Merge sort Funktion kombinieren die Elemente in großen Listen sortiert ( Quelle 2) :
public void MergeSort (int niedrig, int hallo ) {
if ( low < hallo ) {int Mitte = (low + hallo ) /2; MergeSort ( niedrig, mittel ); MergeSort (Mitte + 1 , hallo ); Merge ( niedrig, mittel , hallo );}}
Basic- Merge Funktion
Die Merge-Funktion werden zwei Listen nach der Sortierung zu kombinieren. Wenn die Funktion erhält einzelnen Elemente , wird es zu bestellen. Ansonsten dauert es zwei getrennte Listen , und je nach dem Wunsch des Programmierers um sie in aufsteigender oder absteigender Reihenfolge :
private void merge (int niedrig, int mid, int hallo ) {
< p > int [ ] copy = new int [ x.length -1] ;
//Kopieren Sie beide Teile in die Helfer Array for (int i = niedrig; i < = hallo ; i + +) { copy [ i ] = x [i] ;}
int i = niedrig; int j = Mitte + 1; int k = niedrig; while ( i < = mid && j <= hallo ) {if ( copy [ i] <= copy [ j]) { x [k] = copy [i] ; i + +; } else { x [k] = copy [j] ; j + +; } k + +; } //Kopieren Sie den Rest von der linken Seite des Feldes in das Ziel- Array while ( i < = mid) { x [k] = copy [i] ; k + +; i + +; } }
Merge Sort Recurse
" MergeSort " Funktion rekursiv teilt die Liste. Zunächst teilt er die ursprüngliche Liste in Hälfte für jede Zeit ruft sich selbst rekursiv . Wenn die Rekursion eine einzelne Ziffer erreicht , die Funktion dann Backtracks und beginnt , um die Liste zu bestellen. Jedes Mal, wenn die Funktion Backtracks zu einem vorherigen Aufruf der Funktion , verschmilzt sie zwei Hälften einer kleineren Liste arbeitete schließlich zurück in die vollständige Liste . Die " Merge "-Funktion scheint die Schwerarbeit durch Anordnen und Kopieren von Werten in der Liste zu tun, aber das Herz eines Merge sort ist in der trügerisch einfach " MergeSort "-Funktion .