Algorithmen und Datenstrukturen in C/ Bubblesort

Vorstellung

Bearbeiten

Bubblesort ist die einfachste Art, eine Liste zu sortieren. Der Algorithmus vergleicht immer zwei nebeneinander liegende Elemente und vertauscht die beiden, falls das rechte kleiner ist als das linke. Der Name kommt daher, dass die großen Werte wie Blasen aufsteigen und nach rechts wandern.

Da nach jedem Durchlauf der Liste das größte Element ganz rechts steht, muss man nur noch eine um ein Element kürzere Liste sortieren. Somit muss man nur einmal weniger durch die Liste gehen als sie Elemente hat.

Der Algorithmus

Bearbeiten
void bubblesort(int array[], int length)  
{
   int i, j, tmp;

   for (i = 1; i < length; i++)
   {
      for (j = 0; j < length - i; j++) 
      {
          if (array[j] > array[j + 1]) 
          {
              tmp = array[j];
              array[j] = array[j + 1];
              array[j + 1] = tmp;
          }
      }
   }
}

Laufzeit-Komplexität

Bearbeiten

Für eine Liste mit n Elementen benötigt Bubblesort O(n²) Vergleichsoperationen. allSuffixes :: [a] -> a allSuffixes [] = [] allSuffixes (x:xs) = (x:xs) : allSuffixes xs

Stabilität

Bearbeiten

Bubblesort ist ein stabiler Sortieralgorithmus. Das bedeutet, dass in der sortierten Liste zwei gleiche Elemente in der gleichen Reihenfolge liegen wie in der unsortierten Liste.

Optimierungen

Bearbeiten

Man kann in jedem Schleifendurchlauf prüfen, ob sich noch etwas verändert hat und dann die Sortierung abbrechen.

Um große Datenmengen schnell zu sortieren sollte man einen anderen Sortieralgorithmus verwenden, z. B. Quicksort, Mergesort oder Heapsort