Skip to content

Commit c78e747

Browse files
committed
Merge sort
1 parent d50231b commit c78e747

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

merge_sort/merge_sort.py

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
def merge_sort(arr):
2+
if len(arr) <= 1:
3+
return arr
4+
5+
i = 0
6+
j = 0
7+
k = 0
8+
9+
mid = len(arr) // 2
10+
left = arr[:mid]
11+
right = arr[mid:]
12+
13+
merge_sort(left)
14+
merge_sort(right)
15+
16+
while i < len(left) and j < len(right):
17+
if left[i] <= right[j]:
18+
arr[k] = left[i]
19+
i += 1
20+
else:
21+
arr[k] = right[j]
22+
j += 1
23+
k += 1
24+
25+
while i < len(left):
26+
arr[k] = left[i]
27+
i += 1
28+
k += 1
29+
30+
while j < len(right):
31+
arr[k] = right[j]
32+
j += 1
33+
k += 1
34+
35+
return arr

merge_sort/test_merge_sort.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import unittest
2+
from random import randrange
3+
from merge_sort import merge_sort as alg_sort
4+
5+
6+
class MergeSortTyes(unittest.TestCase):
7+
def test_arr_positives(self):
8+
arr = [randrange(0, 20) for i in range(0, 20)]
9+
expected = sorted(arr)
10+
actual = alg_sort(arr)
11+
assert actual == expected
12+
13+
def test_empty_arr(self):
14+
arr = []
15+
expected = sorted(arr)
16+
actual = alg_sort(arr)
17+
assert actual == expected
18+
19+
def test_single_item_arr(self):
20+
arr = [4]
21+
expected = sorted(arr)
22+
actual = alg_sort(arr)
23+
assert actual == expected
24+
25+
def test_arr_positives_negatives(self):
26+
arr = [randrange(-20, 20) for i in range(0, 20)]
27+
expected = sorted(arr)
28+
actual = alg_sort(arr)
29+
assert actual == expected

0 commit comments

Comments
 (0)