-
Notifications
You must be signed in to change notification settings - Fork 69
/
selection_sort_student.py
125 lines (88 loc) · 3.96 KB
/
selection_sort_student.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Oriëntatie op AI
Oefening: selection sort
(c) 2019 Hogeschool Utrecht,
Tijmen Muller (tijmen.muller@hu.nl)
Let op! Het is niet toegestaan om bestaande modules te importeren en te
gebruiken, zoals `math` en `statistics`.
"""
def swap(lst, index1, index2):
""" Verwissel de waardes op positie index1 (int) en index2 (int) in lijst lst. """
lst[index1] = lst[index2]
def find_index_of_minimum(lst, start_index=0):
""" Vind de locatie van het minimum in lijst lst vanaf een gegeven start_index (int). """
minimum = lst[start_index]
index_of_minimum = start_index
# Doorloop de lijst lst vanaf start_index en
# update minimum en index_of_minimum waar nodig.
return index_of_minimum
def selection_sort(lst):
"""
Sorteer gegeven lijst volgens het selection sort algoritme.
Zorg dat de gegeven lijst niet verandert, maar geef een nieuwe, gesorteerde variant van de lijst terug.
Args:
lst (list): Een lijst met elementen van gelijk type, bijvoorbeeld gehele getallen.
Returns:
list: Een nieuwe, gesorteerde variant van lijst `lst`.
"""
# Kopieer de originele lijst
lst_sorted = lst.copy()
# Implementeer selection sort met behulp van swap() en find_index_of_minimum()
# Retourneer een gesorteerde variant van de lijst
return lst_sorted
"""
==========================[ HU TESTRAAMWERK ]================================
Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen!
Je kunt je code testen door deze file te runnen of met behulp van pytest.
"""
import random
def test_swap():
lst_test = [4, 9, 7]
swap(lst_test, 0, 1)
assert lst_test == [9, 4, 7], "Fout: swap([4, 9, 7], 0, 1) geeft {} in plaats van {}".format(lst_test, [9, 4, 7])
lst_test = [4, 9, 7]
swap(lst_test, 1, 2)
assert lst_test == [4, 7, 9], "Fout: swap([4, 9, 7], 1, 2) geeft {} in plaats van {}".format(lst_test, [4, 7, 9])
lst_test = [4, 9, 7]
swap(lst_test, 0, 2)
assert lst_test == [7, 9, 4], "Fout: swap([4, 9, 7], 0, 2) geeft {} in plaats van {}".format(lst_test, [7, 9, 4])
def test_find_index_of_minimum():
lst_test = [18, 6, 21, 44, 9, 14]
assert find_index_of_minimum(lst_test, 0) == 1, \
f"Fout: find_index_of_minimum({lst_test}, 0) geeft {find_index_of_minimum(lst_test, 0)} in plaats van 1"
assert find_index_of_minimum(lst_test, 2) == 4, \
f"Fout: find_index_of_minimum({lst_test}, 2) geeft {find_index_of_minimum(lst_test, 2)} in plaats van 4"
assert find_index_of_minimum(lst_test, 3) == 4, \
f"Fout: find_index_of_minimum({lst_test}, 3) geeft {find_index_of_minimum(lst_test, 3)} in plaats van 4"
def test_selection_sort():
lst_test = random.choices(range(-99, 100), k=6)
lst_copy = lst_test.copy()
lst_output = selection_sort(lst_test)
assert lst_copy == lst_test, "Fout: selection_sort(lst) verandert de inhoud van lijst lst"
assert lst_output == sorted(lst_test), \
f"Fout: selection_sort({lst_test}) geeft {lst_output} in plaats van {sorted(lst_test)}"
if __name__ == '__main__':
try:
print("\x1b[32m")
test_swap()
print("Je functie swap() werkt goed!")
test_find_index_of_minimum()
print("Je functie find_index_of_minimum() werkt goed!")
test_selection_sort()
print("Je selection sort algoritme werkt goed!\n\nKnap gedaan!\n")
print("\x1b[0m")
aantal = int(input("Hoeveel getallen zal ik sorteren? "))
lijst = random.choices(range(0, 100), k=aantal)
print(f"De lijst: \n\t{lijst}")
gesorteerde_lijst = selection_sort(lijst)
print(f"is na sortering: \n\t{gesorteerde_lijst}")
except AssertionError as ae:
print("\x1b[31m") # Rode tekstkleur
if not ae:
print("Je code veroorzaakt onderstaande AssertionError:")
raise ae
else:
print(ae)
print("\x1b[0m") # Reset tekstkleur