Einführung in die Prinzipien der schnellen Sortierung
Schnelles Sortieren ist ein Upgrade der Blasensortierung, das wir zuvor gelernt haben. Sie alle gehören zum Sortieren von Tausch und verwenden alle konstante Vergleiche und Bewegungen, um Sortieren zu erreichen. Schnelles Sortieren ist ein sehr effizienter Sortieralgorithmus. Seine Implementierung erhöht den Abstand zwischen dem Vergleich und der Bewegung von Datensätzen und verschiebt Datensätze mit größeren Schlüsselwörtern direkt von vorne nach hinten und Datensätze mit kleineren Schlüsselwörtern direkt von hinten nach vorne, wodurch die Gesamtzahl der Vergleiche und Bewegungen verringert wird. Gleichzeitig wird die Idee, "zu trennen und zu erobern", angenommen, um die großen in kleine und kleine in kleinere aufzuteilen. Das Prinzip lautet wie folgt: Wählen Sie für einen bestimmten Satz von Datensätzen ein Benchmark -Element aus, normalerweise wird das erste Element oder das letzte Element ausgewählt, und durch einen Scan ist die zu sortierte Sequenz in zwei Teile unterteilt, teilweise kleiner als das Benchmark -Element und teilweise größer als das Benchmark -Element. Zu diesem Zeitpunkt befindet sich das Benchmark -Element nach der Sortierung in der richtigen Position, und dann werden die beiden Teile rekursiv auf die gleiche Weise sortiert, bis alle Datensätze in der Sequenz angeordnet sind.
1. Die kleinste Anzahl von k
Geben Sie N -Zahlen ein, um die kleinsten K -Zahlen zu finden. Geben Sie beispielsweise 4,5,1,6,2,7,3,8 ein, und die kleinste Zahl beträgt 1,2,3,4
Basierend auf O (n) kann dieses Problem unter Verwendung der Parionsfunktion gelöst werden. Wenn die KTH -Anzahl des Arrays basierend auf der KTH -Nummer angepasst wird, so dass sich alle Zahlen, die kleiner als die KTH -Nummer links im Array liegen, und alle Zahlen, die größer als das KTH -Array sind, rechts vom Array befinden. Nach der Einstellung sind die k -Zahlen links im Array die kleinsten K -Zahlen, die nicht unbedingt bestellt werden.
import Java.util.scanner; public class main {public static void main (string [] args) {scanner in = neuer scanner (System.in); int n = in.nextint (); int k = in.nextint (); int [] num = new int [n]; int [] out = new int [k]; i = 0; i <n; i ++) {num [i] = in.nextint ();} boolean b = getMink (n, num, k, out); if (b) {für (int i = 0; i <k; i ++) {System.out.print (out [i] "); int uik, int [] poutputArray) {if (pinputArray == null || poutputArray == null || uiK> UiInputnum || UiInputnum <= 0 || uiK <= 0) {return false;} intstart = 0; while (index! i = 0; i <uik; i ++) {poutputArray [i] = PinputArray [i];} return true;} // Partition Partition -Funktion gibt den Indexwert der schnellen Zeile des ersten Elements von Array A index öffentlich statische statische Partition zurück (int [] a, int, int end) {int privot = a [statat; int i = starten; int i = starten; int i =; J = Ende; while (i <j) {while (i <j && privot <= a [j]) {j-;} Swap (a, i, j); while (i <j && privot> = a [i]) {i ++;} Swap (a, i, j);} return i;} public static void Swap (int [] a, int i, int j) {int t = a [i]; a [i] = a [j]; a [j] = t;}}}}}}}}}}}}}}}}}}; 2. Zahlen mit mehr als der Hälfte der Vorkommen im Array
Es gibt eine Zahl im Array, die mehr als die Hälfte der Länge des Arrays erscheint. Bitte finden Sie diese Nummer. Zum Beispiel 1, 2, 3, 2, 2, 5, 4, 2, die Zahl 2 erscheint 5 -mal im Array, der die Hälfte der Länge des Arrays überschreitet, Ausgang 2
Inspiriert von der schnellen Sortierung, in der schnellen Sortierung, wählen Sie nun eine Nummer im Array aus und passen Sie dann die Reihenfolge der Zahlen im Array an, so dass die Zahlen, die kleiner als die ausgewählte Zahl sind, links und die Zahlen größer als die ausgewählte Zahl auf der rechten Seite eingestuft werden.
Wenn der Index der ausgewählten Nummer N/2 ist, ist diese Nummer die Medianzahl im Array
import Java.util.scanner; public class main {public static void main (String [] args) {scanner in = new scanner (System.in); int n = in B = Gethalfnum (n, num); if (b! start = 0; int end = uiInputnum-1; int index = partition (pinputArray, start, ende); Während (Index! Start, int End) {int privot = a [start]; int i = start; int j = end; while (i <j) {while (i <j && privot <= a [j]) {j-;} Swap (a, i, j); while (i <j & privot> = a [i]) {i ++;} Swap (a, i, j);} return i;} public static void Swap (int [] a, int i, int j) {int t = a [i]; a [i] = a [j]; a [j] = t;}}}}}}}}}}}}}; 3. Finden Sie die kleinste KTH -Nummer im Array
Zum Beispiel, angegeben Array 1, 5, 2, 6, 8, 0, 6, beträgt die 4. kleinste Zahl 5
import Java.util.scanner; public class main {public static void main (string [] args) {scanner in = neuer scanner (System.in); int n = in.nextint (); int k = in.nextint (); int [] num = new int [n]; // int [] out = new int [k]; für (int i = 0; i <n; i ++) {num [i] = in.nextint ();} int b = getMink (n, num, k); if (b! uik) {if (pinputArray == null || uik> UiInputnum || UiInputnum <= 0 || uiK <= 0) {return -1;} int start = 0; int end = UiInputnum -1; int index = partition (pinputArray, start, end); while (index! end) {int privot = a [start]; int i = start; int j = end; while (i <j) {while (i <j && privot <= a [j]) {j-;} Swap (a, i, j); while (i <j & privot> = a [i]) {i ++;} Swap (a, i, j);} return i;} public static void Swap (int [] a, int i, int j) {int t = a [i]; a [i] = a [j]; a [j] = t;}}}}}}}}}}}}};Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels zum Beispielcode von drei Algorithmus -Fragen, die auf der schnellen Sortierung der Java -Programmierung basieren. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!