Skip to content

Commit dd00de0

Browse files
committed
added radix_lsd_sort + testing
1 parent db823c4 commit dd00de0

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*/__pycache__

sorting_algorithms/radix_lsd_sort.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
def radix_lsd_sort(arr):
2+
if len(arr) <= 1:
3+
return arr
4+
5+
BASE = 10
6+
max_val = max(arr)
7+
factor = 1
8+
9+
while factor <= max_val:
10+
partition = [[] for _ in range(BASE)]
11+
for i in arr:
12+
index = (i//factor) % BASE
13+
partition[index].append(i)
14+
15+
arr = []
16+
for i in partition:
17+
arr.extend(i)
18+
19+
factor *= BASE
20+
21+
return arr
22+
23+
24+
def binary_radix_lsd_sort(arr):
25+
if len(arr) <= 1:
26+
return arr
27+
28+
BASE = 2
29+
bit_length = max(arr).bit_length()
30+
31+
for bit in range(bit_length):
32+
partition = [[] for _ in range(BASE)]
33+
for i in arr:
34+
index = (i >> bit) & 1
35+
partition[index].append(i)
36+
37+
arr = [*partition[0], *partition[1]]
38+
39+
return arr
40+
41+

sorting_algorithms/testing.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from bubble_sort import bubble_sort
2+
from merge_sort import merge_sort
3+
from quicksort import quicksort
4+
from radix_lsd_sort import radix_lsd_sort, binary_radix_lsd_sort
5+
6+
7+
if __name__ == "__main__":
8+
easy_sort_test = [9, 6, 8, 2, 3]
9+
medium_sort_test = [9, 3, 8, 2, 0, -10, 3]
10+
difficult_sort_test = [21561, 9, -124714, 24171, 21742174, 47421, -7285, 261, 2, 62161, 7, 521, 10, 3, 216, 7, 6216, 2, 68, 9, 0, -1247, -83148, -1235, 166, 389, 1235, 852, 13, 63, 7317, 8539, 32732, 24151621, 2157105, 121, 21, 1, -10, -100, -124, -2, 7327, 23, 19361, 32, 742, 8765, 987654321, 123456, 7654, 87, 6543, 21261, 48245, 16, 247, 942, 532, 913, 126, 274, 135, 100000, 2162, 37272, 125, 8421]
11+
difficult_sort_test2 = [21561, 9, -124714, 0, -1247, 24171, 21742174, 47421, -7285, 261, 2, 521, 10, 3, 216, 7, 6216, 2, 62161, 7, 68, 9, -83148, -1235, 1, -10, 166, 389, 13, 63, 19361, 32, 7317, 8539, 32732, 24151621, -2, 7327, 2157105, 1235, 852, 121, 21, -100, -124, 23, 742, 7654, 87, 123456, 6543, 21261, 48245, 16, 8765, 987654321, 247, 125, 8421, 942, 532, 913, 126, 274, 135, 100000, 2162, 37272]
12+
13+
difficult_non_negative_sort_test = [5312, 621, 7, 47, 1, 34, 7, 3146134, 416, 21, 641, 3512, 6325, 64174, 326, 3416, 417, 3164, 3421653, 731, 1431, 43181346, 631280]
14+
15+
print(bubble_sort(difficult_sort_test) == merge_sort(difficult_sort_test) == quicksort(difficult_sort_test2) == sorted(difficult_sort_test2))
16+
17+
print(bubble_sort(difficult_sort_test) == sorted(difficult_sort_test2))
18+
print(merge_sort(difficult_sort_test) == sorted(difficult_sort_test2))
19+
print(quicksort(difficult_sort_test) == sorted(difficult_sort_test2))
20+
21+
print(radix_lsd_sort(difficult_non_negative_sort_test) == sorted(difficult_non_negative_sort_test))
22+
print(binary_radix_lsd_sort(difficult_non_negative_sort_test) == sorted(difficult_non_negative_sort_test))

0 commit comments

Comments
 (0)