Selection-Sort
def selectionSort(liste):
l = len(liste)
for i in range(l):
min = i
for j in range(i+1,l):
if liste[j] < liste[min]: min = j
tausche(liste, i, min)Selection-Sort Laufzeit
Best Case: 1/2 N^2
Mittel: 1/2 N^2
Worst Case: 1/2 N^2
Insertion Sort Laufzeit
Best Case: N
Mittel: 1/4 N^2
Worst Case: 1/2 N^2
Mergesort Laufzeit
Best Case: 1/2 N lg N
Mittel: N lg N
Worst Case: N lg N
Quicksort-Laufzeit
Best Case: N lg N
Mittel: 2N ln N
Worst Case: 1/2 N^2
Sort Implementierung (Mergesort)
def sortPart(a, lo, hi, aux): if hi <= lo: return mid = (lo + hi) // 2 sortPart(a, lo, mid, aux) sortPart(a, mid+1, hi, aux) merge(a, lo, mid, hi, aux) def mergeSort(a): n = len(a) aux = [0] * n sortPart(a, 0, n-1, aux)
Merge Implementierung
def merge(a, lo, mid, hi, aux):
aux[lo:hi+1] = a[lo:hi+1]
i = lo
j = mid+1
for k in range(lo, hi+1):
if i > mid:
a[k] = aux[j]
j += 1
elif j > hi:
a[k] = aux[i]
i += 1
elif aux[j] < aux[i]:
a[k] = aux[j]
j += 1
else:
a[k] = aux[i]
i += 1Insertion Sort
def insertionSort(liste):
l = len(liste)
for i in range(1,l):
j = i
while (j > 0) and (liste[j] < liste[j-1]):
tausche(liste, j, j-1)
j -= 1Selection Sort Tausch
Selection Sort benötigt N Austausch Operationen
Insertion Sort Tausch
Es werden 1/4 N^2 Austausch Operationen benötigt
Definition: Stabil
Ein Sortieralgorithmus ist stabil wenn er die Reihenfolgen von gleichen Elementen während der Sortierung nicht vertauscht.