# Solution ## `selection_sort` Zunächst müssen wir eine neue Liste mit den selben Elementen erstellen, am schnellsten geht das mit `copy.deepcopy` welche eine vollständige Copie erstellt. ```python from copy import deepcopy xss = deepcopy(xs) ``` Wir müssen durch jedes Element gehen, also ```python for i in range(len(xss)): # ... ``` Nun wollen wir in den übrigen Elementen ($j = i + 1$) das kleinste finden ```python for i in range(len(xss)): min_i = i # index vom kleinsten Element, # das aktuelle i falls dieses schon das kleinste ist for j in range(i + 1, len(xss)): # ... ``` Jetzt vergleichen wir nur noch jedes j-te Element mit dem aktuellen kleinsten ```python for i in range(len(xss)): min_i = i # index vom kleinsten Element, # das aktuelle i falls dieses schon das kleinste ist for j in range(i + 1, len(xss)): if xss[j] < xss[min_i]: min_i = j # kleineres element gefunden ``` Nun können wir einfach das i-te mit dem min_i vertauschen (entweder ist es i oder wir haben ein kleineres gefunden) ```python xss[i], xss[min_i] = xss[min_i], xss[i] # tauschen i mit min_i ``` und am Ende können wir `xss` zurückgeben ```python return xss ``` ## `binary_search` Hierfür definieren wir zunächst `left = 0` und `right = len(xs) - 1`, dann können wir die Schleifenbedingung definieren als ```python while left <= right: # ... ``` weil sobald diese nicht mehr gilt konnten wir den Wert nicht finden. (Links und Rechts tauschen) und wir können `None` zurückgeben. Nun berechnen wir den mittleren Index mit dem integer division (oder auch floor weil es die Zahl hinterm Komma verwirft). ```python middle = (left + right) // 2 ``` Nun müssen wir nur noch `xs[middle]` mit `value` vergleichen ```python if xs[middle] < value: left = middle + 1 elif xs[middle] > value: right = middle - 1 ``` Und wenn `xs[middle] == value` ist haben wir unseren Index `middle` gefunden. ```python if xs[middle] < value: left = middle + 1 elif xs[middle] > value: right = middle - 1 else: return middle ```