Wie die Partition Methode für Quicksort in Java zu verwenden

Der schwierige Teil der Java Quicksort Technik ist die Trennwand Verfahren. Diese Methode akzeptiert zwei Parameter: die niedrigen und hohen Indizes, die den Teil des Feldes zu markieren, die sortiert werden sollen. Die Grundzüge der Trennwand Verfahren geht ungefähr so:

  1. Wählen Sie einen Drehpunkt.

  2. Verschieben aller Elemente, die kleiner als der Drehpunkt auf der linken Seite der Trennwand sind.

  3. Verschieben aller Elemente, die größer ist als der Drehpunkt auf der rechten Seite der Trennwand sind.

  4. Gibt den Index des Drehpunktes.

Die am weitesten verbreitete Technik für die Array-Partitionierung ist zwei Indexvariablen zu erhalten, mit dem Namen ich und j, dass die Arbeit von beiden Enden der Anordnung in Richtung der Mitte.

Zuerst, ich Anfang des Arrays beginnt bei und bewegt sich vorwärts, bis er einen Wert trifft, die größer ist als der Schwenkwert ist. Dann j beginnt am gegenüberliegenden Ende des Arrays und rückwärts bewegt, bis er einen Wert findet, der unter dem Drehpunkt ist.

An diesem Punkt der Trennwand Methode hat einen Wert, der auf der linken Seite der Anordnung und einem Wert größer als der Drehpunkt ist, der kleiner ist als der Drehpunkt auf der rechten Seite der Anordnung. So tauscht es ihnen.

Als nächstes wiederholt der Zyklus: ich inkrementiert wird, bis er einen anderen Wert feststellt, der größer als der Schwenkwert ist, j erniedrigt wird, bis sie einen anderen Wert findet, der unter dem Drehwert ist, und die Elemente ausgetauscht werden. Dieser Vorgang wiederholt sich, bis j ist weniger als ich, was bedeutet, dass die Indizes überschritten haben und die Partitionierung erfolgt.

Hier ist ein Code, der alles zusammen bringt:

public static int Partition (int niedrig, int hoch) {int Dreh = a [low] -int i = niedrig - 1-int j = hoch + 1-while (i lt; j) {for (i ++ - a [i] lt; schwenkbar i ++) - for (j --- a [j]> schwenkbar j -) - if (i lt; j) swap (i, j) -} return J-}

Beachten Sie, dass in diesem Code das Array sortiert wird ein statisch int Array mit dem Namen ein. Die unteren und oberen Ende der Trennwand unterteilt werden als Parameter übergeben in, und das Verfahren beginnt, indem das erste Element in der Partition als Wert für den Drehpunkt zu wählen. Als nächstes initialisiert sie die Indexvariablen ich und j aus den Parametern.

Beachten Sie, dass 1 von dem niedrigen Wert subtrahiert wird, und dass ein auf den hohen Mehrwert. Die Indexvariablen nehmen einen Schritt aus dem Array zurück, bevor der Looping beginnt, so dass sie einen guten Start zu bekommen.

Das während Schleife wird verwendet, um anzuzeigen, wenn die Partitionierung beendet ist. Es wiederholt sich so lange ich ist weniger als j. Nachdem diese Indexvariablen zu stoppen, wird die Unterteilung durchgeführt, und der Wert von j zurückgegeben wird, um den Indexpunkt, um anzuzeigen, dass die linke Partition von der rechten Trennwand unterteilt.

Im Körper des während Schleife sind zwei seltsam körperlos für Schleifen. Diese für Schleifen haben keine Körper, weil ihr einziger Zweck ihre Indexwerte zu bewegen, bis sie einen Wert zu finden, die als entweder weniger ist oder größer ist als der Drehwert.

Der Erste für Schleife erhöht die ich Indexvariable, bis er feststellt, einen Wert, der größer ist als der Drehpunkt ist. Dies für Schleife findet den ersten Wert, der auf der anderen Seite des Arrays bewegt könnte werden müssen.

Als nächstes wird das zweite für Schleife dekrementiert die j Indexvariable, bis er feststellt, einen Wert, der kleiner ist als der Drehpunkt ist. So findet diese Schleife einen Wert, der mit dem Wert der ersten gefunden werden können, müssen getauscht für Schleife.

Schließlich ist die ob Anweisung prüft, ob die Indizes überschritten haben. Unter der Annahme, dass sie nicht haben, ein Wechsel Methode wird aufgerufen, um die Elemente zu tauschen. Das Wechsel Methode ist barmherzig einfach:

public static void swap (int i, int j) {int temp = a [i] -a [i] = a [j] -a [j] = temp-}

Diese Methode bewegt sich der ich Element in eine temporäre Variable, bewegt sich der j Element der ich Element, und bewegt dann die temporäre Variable auf den j Element.

Menü