用python编写一个基数排序算法,对含有1到1000个随机数据的数组进行排序,算法对每个数组测100次运行时间取平均值,绘制运行数据量与运行时间的关系图
时间: 2024-02-19 14:58:53 浏览: 22
好的,下面是用 Python 编写的基数排序算法,并且绘制了运行数据量与运行时间的关系图:
```python
import random
import time
import matplotlib.pyplot as plt
def radix_sort(arr):
# 确定基数
radix = 10
# 确定最大位数
max_length = len(str(max(arr)))
# 进行基数排序
for i in range(max_length):
buckets = [[] for _ in range(radix)]
for element in arr:
digit = (element // (radix ** i)) % radix
buckets[digit].append(element)
arr = [element for bucket in buckets for element in bucket]
return arr
# 生成随机数据
data_sizes = list(range(1, 1001))
data = [random.randint(1, 1000) for i in range(1000)]
# 对数据进行 100 次排序,并统计时间
avg_times = []
for size in data_sizes:
total_time = 0
for i in range(100):
start_time = time.time()
radix_sort(data[:size])
end_time = time.time()
total_time += (end_time - start_time)
avg_time = total_time / 100
avg_times.append(avg_time)
print(f"排序数据量为{size},平均用时{avg_time:.6f}秒")
# 绘制运行数据量与运行时间的关系图
plt.plot(data_sizes, avg_times)
plt.title("Radix Sort")
plt.xlabel("Data Size")
plt.ylabel("Time (s)")
plt.show()
```
代码中,我们首先利用`random`模块生成了含有 1 到 1000 个随机数据的数组,然后对数组进行了 100 次基数排序,每次排序的数据量从 1 逐渐增加到 1000,并统计了每次排序所用的时间,最后计算出了每个数据量下的平均用时,并绘制了运行数据量与运行时间的关系图。
需要注意的是,由于基数排序算法的时间复杂度较低,因此程序可以在较短的时间内完成。在本例中,我们最多只对 1000 个数据进行排序,因此程序也可以在较短的时间内完成。