Blasensortierung rekursiv
- Bubble Sort Rekursiver Algorithmus
- Beispiel für einen rekursiven Bubble-Sort-Algorithmus
- Bubble Sort Rekursiver Algorithmus Implementierung
- Bubble-Sort-Algorithmus Komplexität
Bubble Sort ist ein einfacher Sortieralgorithmus. Er funktioniert durch wiederholte Vergleiche benachbarter Elemente und deren Vertauschung, wenn sie in der falschen Reihenfolge sind. Durch die wiederholten Vergleiche wird das kleinste/größte Element an das Ende des Arrays geblasen, daher wird dieser Algorithmus Bubble-Sort genannt. Obwohl er ineffizient ist, stellt er dennoch die Grundlage für Sortieralgorithmen dar.
Bubble Sort Rekursiver Algorithmus
Nehmen wir an, dass wir ein unsortiertes Array A[]
mit n Elementen haben.
-
Wenn die Größe des Arrays
A
1
ist, dann ist das Array bereits sortiert. Also, zurückgeben. -
Andernfalls führen Sie einen Durchgang der iterativen Blasensortierung auf dem angegebenen Unterarray durch. Dabei wird das letzte Element an die richtige Position gesetzt.
-
Verwenden Sie den Rekursionsaufruf, um die obigen Schritte erneut auf einem kleineren Subarray mit um eins reduzierter Größe durchzuführen.
Beispiel für einen rekursiven Bubble-Sort-Algorithmus
Angenommen, wir haben das Array: (5,3,4,2,1)
. Wir werden es mit dem Bubble-Sort-Algorithmus sortieren.
- Erster Durchlauf:
(5 3 4 2 1) | → | (3 5 4 2 1) | (3 < 5 vertauscht) |
(3 5 4 2 1) | → | (3 4 5 2 1) | (4 < 5 vertauscht) |
(3 4 5 2 1) | → | (3 4 2 5 1) | (2 < 5 vertauscht) |
(3 4 2 5 1) | → | (3 4 2 1 5) | (1 < 5 vertauscht) |
- Zweiter Durchgang:
(3 4 2 1 5) | → | (3 4 2 1 5) | |
(3 4 2 1 5) | → | (3 2 4 1 5) | (2 < 4 vertauscht) |
(3 2 4 1 5) | → | (3 2 1 4 5) | (1 < 4 vertauscht) |
- Dritter Durchgang:
(3 2 1 4 5) | → | (2 3 1 4 5) | (2 < 3 vertauscht) |
(2 3 1 4 5) | → | (2 1 3 4 5) | (1 < 3 vertauscht) |
- Vierter Durchgang:
(2 1 3 4 5) | → | (1 2 3 4 5) | (1 < 2 vertauscht) |
Wir erhalten das sortierte Array nach dem vierten Durchlauf - (1 2 3 4 5)
Bubble Sort Rekursiver Algorithmus Implementierung
#include <bits/stdc++.h>
using namespace std;
void bubbleSort(int arr[], int n) {
if (n == 1) return;
for (int i = 0; i < n - 1; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr[i], arr[i + 1]);
}
}
bubbleSort(arr, n - 1);
}
int main() {
int n = 8;
int arr[8] = {9, 8, 3, 7, 5, 6, 4, 1};
cout << "Input arr: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << "\n";
bubbleSort(arr, n); // Sort elements in ascending order
cout << "Output arr: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << "\n";
}
Bubble-Sort-Algorithmus Komplexität
Zeitkomplexität
- Durchschnittlicher Fall
Im Durchschnitt werden n-i
Vergleiche im i-ten
Durchlauf von Bubble Sort durchgeführt. Wenn es also n Durchläufe gibt, dann kann die durchschnittliche Zeitkomplexität gegeben sein durch
(n-1) + (n-2) + (n-3) ..... + 1 = n*(n-1)/2
Die Zeitkomplexität liegt also in der Größenordnung von O(n2).
- Schlimmster Fall
Der schlechteste Fall tritt ein, wenn das Array umgekehrt sortiert ist und die maximale Anzahl von Vergleichen und Vertauschungen durchgeführt werden muss.
Die Zeitkomplexität im schlimmsten Fall ist O(n2).
- Bester Fall
Der beste Fall tritt ein, wenn das Array bereits sortiert ist, und dann sind nur N Vergleiche erforderlich.
Die Zeitkomplexität im besten Fall ist O(n)
.
Raumkomplexität
Die Platzkomplexität für diesen Algorithmus ist O(n)
aufgrund der rekursiven Aufrufe, die im Stack gespeichert werden.
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn