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