|
27 | 27 |
|
28 | 28 | Source: https://en.wikipedia.org/wiki/Bucket_sort
|
29 | 29 | """
|
30 |
| -DEFAULT_BUCKET_SIZE = 5 |
31 | 30 |
|
32 | 31 |
|
33 |
| -def bucket_sort(my_list: list, bucket_size: int = DEFAULT_BUCKET_SIZE) -> list: |
| 32 | +def bucket_sort(my_list: list) -> list: |
34 | 33 | """
|
35 | 34 | >>> data = [-1, 2, -5, 0]
|
36 | 35 | >>> bucket_sort(data) == sorted(data)
|
37 | 36 | True
|
38 |
| -
|
39 | 37 | >>> data = [9, 8, 7, 6, -12]
|
40 | 38 | >>> bucket_sort(data) == sorted(data)
|
41 | 39 | True
|
42 |
| -
|
43 | 40 | >>> data = [.4, 1.2, .1, .2, -.9]
|
44 | 41 | >>> bucket_sort(data) == sorted(data)
|
45 | 42 | True
|
46 |
| -
|
47 |
| - >>> bucket_sort([]) |
48 |
| - Traceback (most recent call last): |
49 |
| - ... |
50 |
| - Exception: Please add some elements in the array. |
| 43 | + >>> bucket_sort([]) == sorted([]) |
| 44 | + True |
| 45 | + >>> import random |
| 46 | + >>> collection = random.sample(range(-50, 50), 50) |
| 47 | + >>> bucket_sort(collection) == sorted(collection) |
| 48 | + True |
51 | 49 | """
|
52 | 50 | if len(my_list) == 0:
|
53 |
| - raise Exception("Please add some elements in the array.") |
54 |
| - |
55 |
| - min_value, max_value = (min(my_list), max(my_list)) |
56 |
| - bucket_count = (max_value - min_value) // bucket_size + 1 |
57 |
| - buckets = [[] for _ in range(int(bucket_count))] |
| 51 | + return [] |
| 52 | + min_value, max_value = min(my_list), max(my_list) |
| 53 | + bucket_count = int(max_value - min_value) + 1 |
| 54 | + buckets = [[] for _ in range(bucket_count)] |
58 | 55 |
|
59 | 56 | for i in range(len(my_list)):
|
60 |
| - buckets[int((my_list[i] - min_value) // bucket_size)].append(my_list[i]) |
| 57 | + buckets[(int(my_list[i] - min_value) // bucket_count)].append(my_list[i]) |
61 | 58 |
|
62 |
| - return sorted( |
63 |
| - buckets[i][j] for i in range(len(buckets)) for j in range(len(buckets[i])) |
64 |
| - ) |
| 59 | + return [v for bucket in buckets for v in sorted(bucket)] |
65 | 60 |
|
66 | 61 |
|
67 | 62 | if __name__ == "__main__":
|
| 63 | + from doctest import testmod |
| 64 | + |
| 65 | + testmod() |
68 | 66 | assert bucket_sort([4, 5, 3, 2, 1]) == [1, 2, 3, 4, 5]
|
69 | 67 | assert bucket_sort([0, 1, -10, 15, 2, -2]) == [-10, -2, 0, 1, 2, 15]
|
0 commit comments