python写的桶排序动态演示程序
作者:野牛程序员:2023-03-01 20:31:37python阅读 2561
桶排序是一种非常高效的排序算法,特别适合在已知数据范围的情况下使用
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写的快速排序动态演示程序