forked from kennyledet/Algorithm-Implementations
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmerge_sort.py
More file actions
33 lines (26 loc) · 710 Bytes
/
merge_sort.py
File metadata and controls
33 lines (26 loc) · 710 Bytes
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
# this is a python example of a mergesort generator
# (list.sort() is much faster)
#
# Edited by: Jonathan Lebron 2013
def merge_sort(foo):
if len(foo) < 2:
return foo
mid = len(foo) / 2
return merge(merge_sort(foo[:mid]), merge_sort(foo[mid:]))
def merge(left, right):
output = []
i = j = 0
while i < len(left) or j < len(right):
if i >= len(left):
output.append(right[j])
j += 1
elif j >= len(right):
output.append(left[i])
i += 1
elif right[j] < left[i]:
output.append(right[j])
j += 1
else:
output.append(left[i])
i += 1
return output