Skip to content

Commit eb5c053

Browse files
authored
Merge pull request #7 from udistructor/selection-sort-exercise
Selection sort exercise
2 parents 4abac94 + 12fe94b commit eb5c053

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Exercise: Selection Sort
2+
3+
Implement a Multi-Level Sort of a given list of dictionaries based on a given sorting order. If user wants to sort dictionary based on First Key 'A', Then Key 'B', they shall pass list of keys in the order of preference as a list ['A','B']. Your code should be able to sort list of dictionaries for any number of keys in sorting order list.
4+
5+
Using this multi-level sort, you should be able to sort any list of dictionaries based on sorting order preference
6+
7+
Example:
8+
A single dictionary entry contains two keys 'First Name' and 'Last Name'. the list should be sorted first based on 'First Name', then based on 'Last Name', w.r.t. common/same 'First Name' entries.
9+
10+
for this, one shall past sorting order of preference list [ 'First Name' , 'Last Name' ]
11+
12+
For this, Given the following sequence List:
13+
14+
```
15+
[
16+
{'First Name': 'Raj', 'Last Name': 'Nayyar'},
17+
{'First Name': 'Suraj', 'Last Name': 'Sharma'},
18+
{'First Name': 'Karan', 'Last Name': 'Kumar'},
19+
{'First Name': 'Jade', 'Last Name': 'Canary'},
20+
{'First Name': 'Raj', 'Last Name': 'Thakur'},
21+
{'First Name': 'Raj', 'Last Name': 'Sharma'},
22+
{'First Name': 'Kiran', 'Last Name': 'Kamla'},
23+
{'First Name': 'Armaan', 'Last Name': 'Kumar'},
24+
{'First Name': 'Jaya', 'Last Name': 'Sharma'},
25+
{'First Name': 'Ingrid', 'Last Name': 'Galore'},
26+
{'First Name': 'Jaya', 'Last Name': 'Seth'},
27+
{'First Name': 'Armaan', 'Last Name': 'Dadra'},
28+
{'First Name': 'Ingrid', 'Last Name': 'Maverick'},
29+
{'First Name': 'Aahana', 'Last Name': 'Arora'}
30+
]
31+
```
32+
33+
34+
Your algorithm should generate sorted list:
35+
36+
```
37+
[
38+
{'First Name': 'Aahana', 'Last Name': 'Arora'}
39+
{'First Name': 'Armaan', 'Last Name': 'Dadra'}
40+
{'First Name': 'Armaan', 'Last Name': 'Kumar'}
41+
{'First Name': 'Ingrid', 'Last Name': 'Galore'}
42+
{'First Name': 'Ingrid', 'Last Name': 'Maverick'}
43+
{'First Name': 'Jade', 'Last Name': 'Canary'}
44+
{'First Name': 'Jaya', 'Last Name': 'Seth'}
45+
{'First Name': 'Jaya', 'Last Name': 'Sharma'}
46+
{'First Name': 'Karan', 'Last Name': 'Kumar'}
47+
{'First Name': 'Kiran', 'Last Name': 'Kamla'}
48+
{'First Name': 'Raj', 'Last Name': 'Nayyar'}
49+
{'First Name': 'Raj', 'Last Name': 'Sharma'}
50+
{'First Name': 'Raj', 'Last Name': 'Thakur'}
51+
{'First Name': 'Suraj', 'Last Name': 'Sharma'}
52+
]
53+
```
54+
55+
56+
57+
58+
59+
[Solution](https://github.com/codebasics/data-structures-algorithms-python/blob/master/algorithms/7_SelectionSort/selection_sort_exercise_solution.py)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
def multilevel_selection_sort(elements, sort_by_list):
2+
for sort_by in sort_by_list[-1::-1]:
3+
for x in range(len(elements)):
4+
min_index = x
5+
for y in range(x, len(elements)):
6+
if elements[y][sort_by] < elements[min_index][sort_by]:
7+
min_index = y
8+
if x != min_index:
9+
elements[x], elements[min_index] = elements[min_index], elements[x]
10+
11+
12+
if __name__ == '__main__':
13+
elements = [
14+
{'First Name': 'Raj', 'Last Name': 'Nayyar'},
15+
{'First Name': 'Suraj', 'Last Name': 'Sharma'},
16+
{'First Name': 'Karan', 'Last Name': 'Kumar'},
17+
{'First Name': 'Jade', 'Last Name': 'Canary'},
18+
{'First Name': 'Raj', 'Last Name': 'Thakur'},
19+
{'First Name': 'Raj', 'Last Name': 'Sharma'},
20+
{'First Name': 'Kiran', 'Last Name': 'Kamla'},
21+
{'First Name': 'Armaan', 'Last Name': 'Kumar'},
22+
{'First Name': 'Jaya', 'Last Name': 'Sharma'},
23+
{'First Name': 'Ingrid', 'Last Name': 'Galore'},
24+
{'First Name': 'Jaya', 'Last Name': 'Seth'},
25+
{'First Name': 'Armaan', 'Last Name': 'Dadra'},
26+
{'First Name': 'Ingrid', 'Last Name': 'Maverick'},
27+
{'First Name': 'Aahana', 'Last Name': 'Arora'}
28+
]
29+
30+
print(f'Given unsorted array:', *elements, sep='\n')
31+
multilevel_selection_sort(
32+
elements, ['First Name', 'Last Name'])
33+
print(f'Array after Multi-Level Sorting:', *elements, sep='\n')

0 commit comments

Comments
 (0)