现在有多种排序算法,用归并排序算法,请使用python语言对1000以内的一定随机数进行排序,随机数的个数是这样定义的,如你的学号是:20204075117,则生成的随机数个数为20+20+40+75+117=272,即对1000以内的272个随机数进行排序,同时使用柱状图完成排序的动画演示。
时间: 2024-03-12 10:47:41 浏览: 68
编程实现希尔、快速、堆、归并排序算法,随机产生10000个随机数存入磁盘文件,读取,并将不同排序方法的结果存入文件中(含报告)
5星 · 资源好评率100%
好的,我可以帮你完成这个任务。首先,我们需要生成272个1000以内的随机数。代码如下:
```python
import random
random.seed(20204075117) # 使用学号作为随机数生成器的种子
num_list = [random.randint(1, 1000) for _ in range(272)]
print(num_list)
```
接下来,我们使用归并排序对这些随机数进行排序。代码如下:
```python
def merge_sort(nums):
if len(nums) <= 1:
return nums
mid = len(nums) // 2
left = nums[:mid]
right = nums[mid:]
left = merge_sort(left)
right = merge_sort(right)
return merge(left, right)
def merge(left, right):
result = []
i = 0
j = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += left[i:]
result += right[j:]
return result
sorted_nums = merge_sort(num_list)
print(sorted_nums)
```
最后,我们使用matplotlib库生成柱状图动画演示。代码如下:
```python
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, ax = plt.subplots()
def update(num, data, rects):
for rect, h in zip(rects, data[num]):
rect.set_height(h)
return rects
def init():
rects = ax.bar(range(len(num_list)), num_list, align="edge")
return (rects,)
sorted_data = [merge_sort(num_list[:i]) + num_list[i:] for i in range(len(num_list))]
rects = ax.bar(range(len(num_list)), num_list, align="edge")
ani = animation.FuncAnimation(fig, update, frames=len(sorted_data), fargs=(sorted_data, rects), init_func=init, blit=True, interval=10)
plt.show()
```
运行代码后,你将会看到一个柱状图动画演示,演示过程中随机数会逐渐从无序变为有序。
阅读全文