30
30
from __future__ import annotations
31
31
32
32
33
- def bucket_sort (my_list : list ) -> list :
33
+ def bucket_sort (my_list : list , bucket_count : int = 10 ) -> list :
34
34
"""
35
35
>>> data = [-1, 2, -5, 0]
36
36
>>> bucket_sort(data) == sorted(data)
@@ -43,21 +43,27 @@ def bucket_sort(my_list: list) -> list:
43
43
True
44
44
>>> bucket_sort([]) == sorted([])
45
45
True
46
+ >>> data = [-1e10, 1e10]
47
+ >>> bucket_sort(data) == sorted(data)
48
+ True
46
49
>>> import random
47
50
>>> collection = random.sample(range(-50, 50), 50)
48
51
>>> bucket_sort(collection) == sorted(collection)
49
52
True
50
53
"""
51
- if len (my_list ) == 0 :
54
+
55
+ if len (my_list ) == 0 or bucket_count <= 0 :
52
56
return []
57
+
53
58
min_value , max_value = min (my_list ), max (my_list )
54
- bucket_count = int (max_value - min_value ) + 1
59
+ bucket_size = (max_value - min_value ) / bucket_count
55
60
buckets : list [list ] = [[] for _ in range (bucket_count )]
56
61
57
- for i in my_list :
58
- buckets [int (i - min_value )].append (i )
62
+ for val in my_list :
63
+ index = min (int ((val - min_value ) / bucket_size ), bucket_count - 1 )
64
+ buckets [index ].append (val )
59
65
60
- return [v for bucket in buckets for v in sorted (bucket )]
66
+ return [val for bucket in buckets for val in sorted (bucket )]
61
67
62
68
63
69
if __name__ == "__main__" :
0 commit comments