Weg mit Bubble & Bin: Die Eimersortierung ist die schnellste Sortierung!

Klicken Sie nicht weg, denn der Bucket Sort Algorithmus ist wahrscheinlich die beste Sortiermethode, die die Produktwelt je gesehen hat.

Große Behauptung, ja ich weiß - aber wir werden darauf eingehen, warum.

In diesem Bucket Sort Artikel

Was ist also die Bucket Sorting Methode?

Ausgehend von der Annahme, dass Sie Daten in einem Array sortieren möchten, ist die Eimersortierung ein guter Ausgangspunkt. Wenn sie Ihren Anforderungen entspricht, brauchen Sie nicht weiter zu suchen - Ihre Suche ist beendet!

Das Sortieren einer Reihe von Elementen kann auf zwei Arten erfolgen - entweder wird die Liste durchlaufen, indem jeder Wert mit einem anderen verglichen wird, um die richtige Reihenfolge zu finden (Bubble-Sortierung), oder jeder Wert erhält einen eigenen Speicherbereich und wird an den entsprechenden Platz verschoben (Bin-Sortierung).

Bucket Sort arbeitet mit der letztgenannten Methode, also Bin Sort. Schauen wir uns den Unterschied zu bin sort genauer an, bevor wir Ihnen zeigen, warum bucket sort so gut ist.

Angenommen, wir haben ein Array mit 10 Ganzzahlen, das sind unsere Buckets. Wir haben einen Zähler, der als die Anzahl der Elemente in jedem Bucket fungiert - wenn wir also starten, ist dieser Zähler gleich der Anzahl der Elemente in unserem Array, d.h. 10.

Bevor wir mit dem Sortieren dieses Arrays beginnen, füllen wir jeden Bereich mit demselben Wert - einem ganzzahligen Wert zwischen 0 und 9 einschließlich.

Nun, da alle 5 Eimer voll sind, ist es an der Zeit, mit dem Sortieren fortzufahren. Woher wissen wir, wie viel Kapazität jeder Eimer hat? Jeder Eimer fasst das Doppelte der Werte, die sich gerade in ihm befinden, d. h. 2n mit n = 0...9 (10 Eimer). Der Grund für die Verdoppelung liegt darin, dass der gesuchte Wert nur 1/10 des Platzes einnimmt, wenn man in einen Bereich hineinschaut, um zu sehen, ob er sich darin befindet.

Beispiel: Eimer 5 enthält 8 Werte (8 * 2) und der nächstkleinere Eimer, der zwei Werte enthält, würde 4 (4 * 2) enthalten. Verstehen Sie, dass dies eine Verdoppelung nach unten ist?

Wenn wir unseren ersten zu sortierenden Wert, also 5, betrachten, wissen wir, dass die Suche im Bereich 5 aufgrund seiner geringen Kapazität nur einen winzigen Bruchteil einer Sekunde dauern wird. Nehmen wir nun an, wir wollen herausfinden, wo sich 34 in unserem Array befindet - nun, die Suche im Bereich 34 wird nicht einmal 0,000000001 Sekunden dauern! Es wird ewig dauern, denn es gibt 100000 Werte darin!

Nun gut, ich denke, Sie haben verstanden, worum es geht. Schauen wir uns nun kurz die Alternativen des Bucket Sort an.

Geschichte des Bucket Sort Algorithmus

Wann wurde diese Methode entwickelt? Bucket Sort soll 1955 erfunden worden sein, aber später wurde festgestellt, dass es die Methode mindestens seit 1945 gibt.

In den 1970er Jahren begann es, sich durchzusetzen, wurde aber erst 1995, als die Geschwindigkeit von Computern wirklich zu steigen begann, auf breiter Front angenommen.

Heutzutage ist die Eimersortierung einer der beliebtesten Sortieralgorithmen überhaupt - an dritter Stelle nach der Mischsortierung und der Schnellsortierung! Obwohl dies keine große Sache zu sein scheint, da sowohl bin sort als auch bucket sort im Allgemeinen O(n * log(n)) sind, werden Sie bei großen Datenmengen aufgrund der effizienten Art und Weise, wie Vergleiche durchgeführt werden, ohnehin bucket sort verwenden wollen.

Was ist Bin und Bubble Sort?

Bei der Bin-Sortierung besteht die Idee darin, für jeden zu sortierenden Wert einen eigenen "Bereich" zu haben. Hier ist ein Beispiel für die Implementierung von Bin Sort:

Diese Implementierung ist wahrscheinlich nicht schneller als Bucket Sort und hat so ziemlich die gleiche Zeitkomplexität wie Bucket Sort, aber was wäre, wenn wir dieses winzige bisschen mehr einsparen könnten? Nun, wir können!

Bubble Sort vs. Bucket Sort - Wie passt Bubble Sort in diese Gleichung?

Bei der Blasensortierung werden lediglich 2 benachbarte Werte verglichen und bei Bedarf vertauscht (ein Brute-Force-Ansatz). Der einzige Unterschied zur Eimersortierung besteht darin, wie groß diese Eimer sind, bei der Bubble-Sortierung sind sie alle gleich groß. Wenn man sie gleich groß macht wie den größten Eimer in einer Eimersortierung, erhält man eine Eimersortierung!

Bubble Sort vs. Bucket Sort - Warum ist Bucket Sort schneller?

Kurz gesagt, die Zeitkomplexität von Bubble Sort ist O(n^2). Die Zeitkomplexität der Eimersortierung lässt sich durch Multiplikation aller Verzweigungen ermitteln, die erforderlich sind, um Elemente darin zu finden, d. h. wir müssen in jedem einzelnen Eimer suchen, bis wir ihn entweder gefunden haben oder nicht tief genug gegangen sind.

Wenn wir dies für 10 Eimer mit jeweils 100000 Artikeln tun würden... nun... ich glaube nicht, dass unser System sehr lange durchhält - das ist auch der Grund, warum Mülleimersortierung nicht sehr gut funktioniert, weil wir nicht nur eine Verdoppelung haben, sondern auch einen weiteren Faktor hinzufügen, der exponentiell langsam wird.

Was wäre, wenn wir die Eimersortierung auf 10 Eimer mit jeweils 100000 Einträgen beschränken würden? Wie viel Zeit benötigt die Eimersortierung jetzt? O(n) (linear)!

Das ist richtig. Das ist dasselbe, als wenn wir eine lineare Suche durch ein Array von 100000 ganzen Zahlen durchführen würden! Alle Verzweigungen und Überprüfungen, die der Eimersortieralgorithmus hinter den Kulissen durchführt, lassen sich auf die Frage reduzieren: "Ist diese ganze Zahl kleiner oder größer als die gesuchte Zahl, die auch mit einer linearen Suche gefunden werden würde?

Eimer Sortieren Big O

Bucket Sort Big O Notation ist O(n + n * k), wobei n = Anzahl der Elemente im Array und k = Anzahl der Buckets.

Bucket Sort Time Complexity

Die Zeitkomplexität einer Bucket-Sortierung ist eine Funktion der Anzahl der Buckets. Eine Bucket-Sortierung mit einem Bucket benötigt konstante Zeit, aber Bucket-Sortierungen mit mehr als einem Bucket haben eine additive Laufzeit, da bei jedem Schritt immer zwei Operationen durchgeführt werden: 1) Überprüfung, ob das Element bereits platziert wurde und 2) Platzierung an der richtigen Stelle. Die Wahl dieses konstanten Multiplikationsfaktors ist Ihnen überlassen - wie groß sollen Ihre Datenstrukturen sein? Im Allgemeinen sind Optimierungen wie diese erst bei einer sehr großen Anzahl von Elementen erforderlich.

Eimersortierung Java

Um einen Bucket-Sortieralgorithmus in Java zu implementieren, müssen Sie zunächst die Bucket-Datenstruktur erstellen - eine, die mindestens so viele Elemente aufnehmen kann, wie ihr zugeführt werden. Der einfachste Weg wäre wahrscheinlich die Verwendung einer ArrayList mit automatischen Erweiterungsmöglichkeiten, aber wenn Sie verknüpfte Listen oder etwas anderes bevorzugen, bleibt es Ihnen überlassen! Ich bin nicht hier, um Ihnen zu sagen, wie Sie Ihre eigenen Sortieralgorithmen programmieren können...

import java.util.*; class BucketSort { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here List<Integer> arr = new ArrayList<Integer>(); for (int i = 0; i < 100000; i++) { arr.add(i); } Bucket sortBucketSort = new BucketSort(); String bucketName = “”; int[] bucketArray = null; System.out.println(“Please input the number of buckets you would like to use.”); int bucketNumInput = Integer.parseInt( JOptionPane.showInputDialog(“How many buckets do you want?”)); if (bucketNumInput < 1) { JOptionPane.showMessageDialog(null, “Invalid Number”); return; } if (arr == null) { arr = new ArrayList<Integer>(); } bucketArray=new int [bucketNumInput]; for (int i=0; i<bucketNumInput ;i++){ bucketArray [i]=arr.size(); } Arrays.sort(bucketArray); for (int i=0; i<bucketArray.length-1; i++) { bucketName = Integer.toString(bucketArray [i]); System.out.println(“Working on bucket ” + bucketName); // inserts data from array to proper location int j = 0; while (j < arr.size()) { if (arr.get(j) > bucketArray [i+1]) { break; } else if (arr.get(j) <= bucketArray [i+1]) { continue; } else { arr.set(j, bucketArray [i+1]); j++; } } bucketArray [i] = arr.size(); // delete from array } System.out.println(“All done!”); for (int i=0; i<bucketArray.length-1; i++) { System.out.println(“Working on bucket ” + bucketName); System.out .print(bucketName + “, you have ” + arr.get(bucketArray [i])); if (arr.get(bucketArray [i]) != 0) { bucketName = Integer .toString(bucketArray [i]); System.out .print(“Removing ” + bucketName); arr .remove(bucketArray [i]); }

Puh! Das ist eine lange Codezeile

Bucket Sort Algorithmus - Schnellster Sortieralgorithmus auf dem Block...

Jetzt wissen Sie, was der Bucket Sort Algorithmus ist. Es ist eine wirklich schnelle Methode, um große Datenmengen zu sortieren und ist besonders nützlich beim Sortieren von Daten im Speicher. Mit dem Bucket-Sort-Algorithmus können Sie schnell 100000 ganze Zahlen sortieren - ein Ding der Unmöglichkeit für alle möglichen anderen Sortieralgorithmen! Was meinen Sie dazu? Werden Sie von nun an auf diese schnelle Sortierung zurückgreifen?

tl;dv für Unternehmen
tl;dv hilft Ihnen, (endlich) den Wert von Besprechungen im gesamten Unternehmen zu nutzen. Zeichnen Sie auf, transkribieren Sie, fassen Sie zusammen, generieren und automatisieren Sie wertvolle Erkenntnisse aus Meetings für Sie und Ihr Unternehmen. In wenigen Minuten einsatzbereit.
Unbegrenzte Aufzeichnungen und Abschriften
AI-Zusammenfassungen
Fragen Sie tl;dv AI
Arbeitet in +30 Sprachen
Multi-Meeting AI-Berichte
+5000 Integrationen

tl;dv Blog

Abonnieren Sie unsere Blogs

Abonnieren Sie den Newsletter und bleiben Sie auf dem Laufenden mit den neuesten Tipps und Nachrichten zu Meetings, Vertrieb, Customer Success, Produktivität und Arbeitskultur.