-
Notifications
You must be signed in to change notification settings - Fork 3
/
03_merge_Sort_using_key.py
48 lines (37 loc) · 1.5 KB
/
03_merge_Sort_using_key.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
def merge_sort(elements, key, descending=False):
size = len(elements)
if size == 1:
return elements
left_list = merge_sort(elements[0:size//2], key, descending)
right_list = merge_sort(elements[size//2:], key, descending)
sorted_list = merge(left_list, right_list, key, descending)
return sorted_list
def merge(left_list, right_list, key, descending=False):
merged = []
if descending:
while len(left_list) > 0 and len(right_list) > 0:
if left_list[0][key] >= right_list[0][key]:
merged.append(left_list.pop(0))
else:
merged.append(right_list.pop(0))
else:
while len(left_list) > 0 and len(right_list) > 0:
if left_list[0][key] <= right_list[0][key]:
merged.append(left_list.pop(0))
else:
merged.append(right_list.pop(0))
merged.extend(left_list)
merged.extend(right_list)
return merged
if __name__ == '__main__':
elements = [
{'name': 'varaliya', 'age': 17, 'time_hours': 1},
{'name': 'mohammed', 'age': 12, 'time_hours': 3},
{'name': 'sameer', 'age': 21, 'time_hours': 2.5},
{'name': 'subhashish', 'age': 24, 'time_hours': 1.5},
]
sorted_list = merge_sort(elements, key='time_hours', descending=True) # In Descending Order
print(*sorted_list, sep='\n')
print("\n")
sorted_list = merge_sort(elements, key='time_hours') # In Ascending Order
print(*sorted_list, sep='\n')