- Notifications
You must be signed in to change notification settings - Fork 16.8k
/
Copy pathmerge_sort.py
47 lines (36 loc) · 1.1 KB
/
merge_sort.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
#!/usr/bin/env python
importrandom
fromtypingimportList
defmerge_sort(arr: List[int]) ->List[int]:
iflen(arr) <=1:
returnarr
mid=len(arr) //2
left=merge_sort(arr[:mid])
right=merge_sort(arr[mid:])
returnmerge(left, right)
defmerge(left: List[int], right: List[int]) ->List[int]:
merged= []
i=j=0
whilei<len(left) andj<len(right):
ifleft[i] <=right[j]:
merged.append(left[i])
i+=1
else:
merged.append(right[j])
j+=1
merged.extend(left[i:])
merged.extend(right[j:])
returnmerged
defgenerate_random_list(size: int=10, lower: int=1, upper: int=100) ->List[int]:
return [random.randint(lower, upper) for_inrange(size)]
defmain():
"""
Executes the merge sort algorithm with a randomly generated list.
Time Complexity: O(n log n)
"""
rand_num_li=generate_random_list()
print(f"Unsorted List: {rand_num_li}")
sorted_list=merge_sort(rand_num_li)
print(f"Sorted List: {sorted_list}")
if__name__=='__main__':
main()