Blasensortierung rekursiv

Harshit Jindal 12 Oktober 2023
  1. Bubble Sort Rekursiver Algorithmus
  2. Beispiel für einen rekursiven Bubble-Sort-Algorithmus
  3. Bubble Sort Rekursiver Algorithmus Implementierung
  4. Bubble-Sort-Algorithmus Komplexität
Blasensortierung rekursiv

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 avatar Harshit Jindal avatar

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

Verwandter Artikel - Sort Algorithm