用python编写一个计数排序算法,对含有1到1000个随机数据的数组进行排序,算法对每个数组测100次运行时间取平均值,绘制运行数据量与运行时间的关系图
时间: 2024-02-19 18:58:50 浏览: 109
好的,下面是用 Python 编写的计数排序算法,并且绘制了运行数据量与运行时间的关系图:
```python
import random
import time
import matplotlib.pyplot as plt
def counting_sort(arr):
# 确定计数数组的大小
max_element = max(arr)
count_arr = [0] * (max_element + 1)
# 计算每个元素出现的次数
for element in arr:
count_arr[element] += 1
# 计算每个元素在排序结果中的位置
for i in range(1, max_element + 1):
count_arr[i] += count_arr[i - 1]
# 根据计数数组,将元素排序到新数组中
sorted_arr = [0] * len(arr)
for element in arr:
sorted_arr[count_arr[element] - 1] = element
count_arr[element] -= 1
return sorted_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()
counting_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("Counting Sort")
plt.xlabel("Data Size")
plt.ylabel("Time (s)")
plt.show()
```
代码中,我们首先利用`random`模块生成了含有 1 到 1000 个随机数据的数组,然后对数组进行了 100 次计数排序,每次排序的数据量从 1 逐渐增加到 1000,并统计了每次排序所用的时间,最后计算出了每个数据量下的平均用时,并绘制了运行数据量与运行时间的关系图。
需要注意的是,由于计数排序算法的时间复杂度较低,因此程序可以在较短的时间内完成。在本例中,我们最多只对 1000 个数据进行排序,因此程序也可以在较短的时间内完成。
阅读全文