Aanpassen — sorteer aflopend
Leerdoel: je past selection sort aan zodat hij sorteert van groot naar klein in plaats van klein naar groot.
Opdracht
Pas selection_sort aan zodat het resultaat aflopend is.
selection_sort_aflopend([5, 2, 8, 1, 4])→[8, 5, 4, 2, 1]selection_sort_aflopend([3, 1, 4, 1, 5, 9, 2, 6])→[9, 6, 5, 4, 3, 2, 1, 1]
Hint: in plaats van de kleinste vooraan zetten, zet je de grootste vooraan.
Code-omgeving wordt voorbereid…
Tip
Er hoeft maar één vergelijking anders. En als je toch bezig bent: de naam
min_index klopt dan niet meer, max_index past beter.
Antwoord
def selection_sort_aflopend(lijst):
n = len(lijst)
for i in range(n):
max_index = i
for j in range(i, n):
if lijst[j] > lijst[max_index]: # < werd >
max_index = j
lijst[i], lijst[max_index] = lijst[max_index], lijst[i]
return lijst
Eén teken anders, van < naar >, plus de variabelenaam. Verder is de
code identiek.
Het is dezelfde symmetrie als tussen vind-maximum en vind-minimum: het patroon blijft staan, alleen de richting van de vergelijking draait om.
Door naar bouw zelf.