2.1 KiB
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.
from copy import deepcopy
xss = deepcopy(xs)
Wir müssen durch jedes Element gehen, also
for i in range(len(xss)):
# ...
Nun wollen wir in den übrigen Elementen (j = i + 1
) das kleinste finden
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
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)
xss[i], xss[min_i] = xss[min_i], xss[i] # tauschen i mit min_i
und am Ende können wir xss
zurückgeben
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
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).
middle = (left + right) // 2
Nun müssen wir nur noch xs[middle]
mit value
vergleichen
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.
if xs[middle] < value:
left = middle + 1
elif xs[middle] > value:
right = middle - 1
else:
return middle