|
| 1 | +# Bucket Sort adalah algoritma pengurutan |
| 2 | +# yang membagi array ke dalam beberapa bucket, |
| 3 | +# lalu setiap bucket diurutkan secara individu |
| 4 | +# dan akhirnya semua bucket digabungkan menjadi array akhir. |
| 5 | + |
| 6 | +# Distribusikan elemen ke dalam bucket. |
| 7 | +# Urutkan masing-masing bucket. |
| 8 | +# Gabungkan semua bucket menjadi satu list terurut. |
| 9 | + |
| 10 | +def bucket_sort(collection: list[float]) -> list[float]: |
| 11 | + """ |
| 12 | + contoh |
| 13 | + >>> bucket_sort([0.25, 0.36, 0.58, 0.41, 0.29, 0.22, 0.45, 0.79]) |
| 14 | + [0.22, 0.25, 0.29, 0.36, 0.41, 0.45, 0.58, 0.79] |
| 15 | + >>> bucket_sort([0.5, 0.3, 0.9, 0.7]) |
| 16 | + [0.3, 0.5, 0.7, 0.9] |
| 17 | + """ |
| 18 | + |
| 19 | + if len(collection) == 0: |
| 20 | + return collection |
| 21 | + |
| 22 | + # Membuat bucket kosong |
| 23 | + bucket_count: int = len(collection) |
| 24 | + buckets: list[list[float]] = [[] for _ in range(bucket_count)] |
| 25 | + |
| 26 | + # Menempatkan elemen ke dalam bucket |
| 27 | + for value in collection: |
| 28 | + index: int = int(value * bucket_count) |
| 29 | + if index != bucket_count: |
| 30 | + buckets[index].append(value) |
| 31 | + else: |
| 32 | + buckets[bucket_count - 1].append(value) |
| 33 | + |
| 34 | + # Mengurutkan setiap bucket dan menggabungkannya |
| 35 | + sorted_array: list[float] = [] |
| 36 | + for bucket in buckets: |
| 37 | + sorted_array.extend(sorted(bucket)) |
| 38 | + |
| 39 | + return sorted_array |
| 40 | + |
| 41 | + |
| 42 | +if __name__ == "__main__": |
| 43 | + import doctest |
| 44 | + |
| 45 | + doctest.testmod(verbose=True) |
| 46 | + |
| 47 | + data: list[float] = [0.78, 0.17, 0.39, 0.26, 0.72, 0.94, 0.21, 0.12, 0.23, 0.68] |
| 48 | + unsorted: list[float] = [float(item) for item in data] |
| 49 | + print(f"data yang belum di sorting adalah {unsorted}") |
| 50 | + print(f"data yang sudah di sorting {bucket_sort(unsorted)}") |
0 commit comments