python写的桶排序动态演示程序
作者:野牛程序员:2023-03-01 20:31:37python阅读 2707
桶排序是一种非常高效的排序算法,特别适合在已知数据范围的情况下使用
python写的桶排序动态演示程序
import time
import random
import matplotlib.pyplot as plt
def bucket_sort(arr):
"""
桶排序
:param arr: 待排序的数组
:return: 排序后的数组
"""
max_num = max(arr)
min_num = min(arr)
bucket_range = (max_num - min_num) / len(arr)
bucket_list = [[] for _ in range(len(arr)+1)] # 初始化桶
color_map = plt.cm.get_cmap('rainbow', len(bucket_list))
# 将元素放入对应的桶中
for i in range(len(arr)):
bucket_index = int((arr[i] - min_num) // bucket_range)
bucket_list[bucket_index].append(arr[i])
draw_buckets(bucket_list) # 绘制桶状态
time.sleep(0.1)
# 对每个桶中的元素进行排序
for i, bucket in enumerate(bucket_list):
bucket_list[i] = sorted(bucket)
draw_buckets(bucket_list) # 绘制桶状态
time.sleep(0.1)
# 将所有桶中的元素按顺序放回原数组
arr_index = 0
for bucket in bucket_list:
for item in bucket:
arr[arr_index] = item
arr_index += 1
draw_buckets(bucket_list) # 绘制桶状态
time.sleep(0.1)
return arr
def draw_buckets(bucket_list):
"""
绘制桶状态
:param bucket_list: 桶列表
"""
plt.clf()
plt.title("Tel:15892516892 ->Bucket Sort")
color_dict = {0: 'r', 1: 'g', 2: 'b', 3: 'c', 4: 'm', 5: 'y', 6: 'k'}
for i in range(len(bucket_list)):
color = color_dict.get(i, 'b')
plt.bar(i, len(bucket_list[i]), color=color)
for j in range(len(bucket_list[i])):
plt.text(i, j + 0.5, str(bucket_list[i][j]), color="w", ha="center", va="center")
plt.xlim(-1, len(bucket_list))
plt.ylim(0, len(max(bucket_list, key=len)))
plt.xticks(range(len(bucket_list)), [str(i) for i in range(len(bucket_list))])
plt.yticks([])
plt.pause(3)
if __name__ == '__main__':
# 生成随机数组并绘制初始状态
arr = [random.randint(1, 100) for _ in range(15)]
draw_buckets([arr])
# 进行桶排序并绘制最终状态
arr = bucket_sort(arr)
draw_buckets([arr])
# 显示绘图窗口
plt.show()
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:python写的插入排序动态演示程序
- 下一篇:python写的快速排序动态演示程序
