Skip to content

Instantly share code, notes, and snippets.

@rebelmachina
Last active August 23, 2022 05:20
Show Gist options
  • Select an option

  • Save rebelmachina/c039fd6ca1189f27731a5662e28bca3f to your computer and use it in GitHub Desktop.

Select an option

Save rebelmachina/c039fd6ca1189f27731a5662e28bca3f to your computer and use it in GitHub Desktop.
recursive_bucket_sort
import random
def sort_helper(lst, idx, max_idx, reversed):
# base case
if not lst or len(lst) == 1:
return lst
if idx >= max_idx:
return lst
buckets = {i: [] for i in range(10)}
for num in lst:
d = int(str(num)[idx])
buckets[d].append(num)
res = []
# recursively sort every bucket and gather results
for i in range(9, -1, -1) if reversed else range(10):
sorted_sublist = sort_helper(buckets[i],idx+1, max_idx, reversed=reversed)
res.extend(sorted_sublist)
return res
def sort(lst, reversed=False):
max_idx = len(str(lst[0]))
return sort_helper(lst, 0, max_idx, reversed=reversed)
# TESTS
# random.seed(0)
for i in range(10):
test = [random.randint(100,999) for j in range(100)]
reversed = random.randint(0,1)
assert sorted(test, reverse=reversed) == sort(test, reversed=reversed)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment