Binäre Sortierung

Harshit Jindal 12 Oktober 2023
  1. Binärer Sortieralgorithmus
  2. Beispiel für binäre Sortierung
  3. Implementierung des binären Sortieralgorithmus
  4. Binärer Sortieralgorithmus Komplexität
Binäre Sortierung

Binäre Sortierung ist ein Sortieralgorithmus vom Typ Vergleichssortierung. Er ist eine Abwandlung des Einfügesortieralgorithmus. Auch bei diesem Algorithmus halten wir ein sortiertes und ein unsortiertes Subarray. Der einzige Unterschied besteht darin, dass wir die korrekte Position eines Elements mit Hilfe der binären Suche statt der linearen Suche finden. Dies hilft, den Sortieralgorithmus zu beschleunigen, indem die Anzahl der erforderlichen Vergleiche reduziert wird.

Binärer Sortieralgorithmus

Nehmen wir an, dass wir ein unsortiertes Array A[] mit n Elementen haben. Das erste Element, A[0], ist bereits sortiert und befindet sich im sortierten Subarray.

  • Markieren Sie das erste Element aus dem unsortierten Unterarray A[1] als Schlüssel.
  • Verwenden Sie die binäre Suche, um die korrekte Position p von A[1] innerhalb des sortierten Teilarrays zu finden.
  • Verschieben Sie die Elemente von p um 1 Schritt nach rechts und fügen Sie A[1] an der richtigen Position ein.
  • Wiederholen Sie die obigen Schritte für alle Elemente in dem unsortierten Unterarray.

Beispiel für binäre Sortierung

Angenommen, wir haben das Array: (5,3,4,2,1,6). Wir sortieren es mit dem Algorithmus der Einfügesortierung.

Sortiertes Subarray Unsortiertes Subarray Array
( 5 ) ( 3, 4, 2, 1, 6) (5, 3, 4, 2, 1, 6)
  • Erste Iteration

Schlüssel : A[1] = 3

Binäre Suche: gibt die Position von 3 als Index 0 zurück. Rest der Elemente im sortierten Array nach rechts verschieben.

Sortiertes Subarray Unsortiertes Subarray Array
( 3 , 5) (4, 2, 1, 6) (3, 5, 4, 2, 1, 6)
  • Zweite Iteration

Schlüssel: A[2] = 4

Binäre Suche: gibt die Position von 4 als Index 1 zurück. Rest der Elemente im sortierten Array nach rechts verschieben.

Sortiertes Subarray Unsortiertes Subarray Array
( 3, 4, 5) (2, 1, 6) (3, 4, 5, 2, 1,6)
  • Dritte Iteration

Schlüssel: A[3] = 2

Binäre Suche: gibt die Position von 2 als Index 0 zurück. Rest der Elemente im sortierten Array nach rechts verschieben.

Sortiertes Subarray Unsortiertes Subarray Array
( 2, 3, 4, 5) (1, 6) (2, 3, 4, 5, 1,6)
  • Vierte Iteration

Schlüssel: A[4] = 1

Binäre Suche: Rückgabe der Position von 1 als Index 0. Rest der Elemente im sortierten Array nach rechts verschieben.

Sortiertes Subarray Unsortiertes Subarray Array
( 1, 2, 3, 4, 5) (6) (1, 2, 3, 4, 5, 6)
  • Fünfte Iteration

Schlüssel: A[5] = 6

Binäre Suche: gibt die Position von 6 als Index 5 zurück. Auf der rechten Seite befinden sich keine Elemente.

Sortiertes Subarray Unsortiertes Subarray Array
( 1, 2, 3, 4, 5, 6) () (1, 2, 3, 4, 5, 6)

Wir erhalten das sortierte Array nach der vierten Iteration - (1 2 3 4 5 6)

Implementierung des binären Sortieralgorithmus

#include <bits/stdc++.h>
using namespace std;

int binarySearch(int a[], int x, int low, int high) {
  if (high <= low) return (x > a[low]) ? (low + 1) : low;

  int mid = (low + high) / 2;

  if (x == a[mid]) return mid + 1;

  if (x > a[mid]) return binarySearch(a, x, mid + 1, high);
  return binarySearch(a, x, low, mid - 1);
}

void binarySort(int a[], int n) {
  for (int i = 1; i < n; ++i) {
    int j = i - 1;
    int key = a[i];
    int pos = binarySearch(a, key, 0, j);
    while (j >= pos) {
      a[j + 1] = a[j];
      j--;
    }
    a[j + 1] = key;
  }
}

int main() {
  int n = 6;
  int arr[6] = {5, 3, 4, 2, 1, 6};
  cout << "Input arr: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
  binarySort(arr, n);  // Sort elements in ascending order
  cout << "Output arr: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
}

Binärer Sortieralgorithmus Komplexität

Zeitkomplexität

  • Durchschnittlicher Fall

Die binäre Suche hat eine logarithmische Komplexität logn im Vergleich zur linearen Komplexität n der linearen Suche, die bei der Einfügungssortierung verwendet wird. Wir verwenden binäre Sortierung für n Elemente, was uns die Zeitkomplexität nlogn gibt. Daher ist die Zeitkomplexität in der Größenordnung von [Big Theta]: O(nlogn).

  • Schlimmster Fall

Der ungünstigste Fall tritt ein, wenn das Array umgekehrt sortiert ist und die maximale Anzahl von Verschiebungen erforderlich ist. Die Zeitkomplexität im schlimmsten Fall ist [Big O]: O(nlogn).

  • Bester Fall

Der beste Fall tritt ein, wenn das Array bereits sortiert ist und keine Verschiebung von Elementen erforderlich ist. Die Zeitkomplexität im besten Fall ist [Big Omega]: O(n).

Raumkomplexität

Die Platzkomplexität für den binären Sortieralgorithmus ist O(n), da außer einer temporären Variablen kein zusätzlicher Speicher benötigt wird.

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