用python编写一个堆排序算法,分别对含有1到10000的随机数据的数组进行排序,输出时间,并绘制数据量与运行时间的图
时间: 2024-02-19 13:58:41 浏览: 76
python 实现堆排序算法代码
好的,以下是用 Python 编写的堆排序算法,并绘制数据量与运行时间的图表:
```python
import random
import time
import matplotlib.pyplot as plt
def heap_sort(arr):
def heapify(arr, n, i):
largest = i
l = 2 * i + 1
r = 2 * i + 2
if l < n and arr[i] < arr[l]:
largest = l
if r < n and arr[largest] < arr[r]:
largest = r
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
n = len(arr)
for i in range(n//2 - 1, -1, -1):
heapify(arr, n, i)
for i in range(n-1, 0, -1):
arr[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
# 生成随机数据并进行排序
x = []
y = []
for n in range(1, 10001):
arr = [random.randint(1, 10000) for _ in range(n)]
start_time = time.time()
heap_sort(arr)
end_time = time.time()
x.append(n)
y.append(end_time - start_time)
# 绘制图表
plt.plot(x, y)
plt.xlabel("数据量")
plt.ylabel("运行时间(秒)")
plt.title("堆排序算法的运行时间")
plt.show()
```
在上面的代码中,我们定义了一个函数 `heap_sort` 来实现堆排序算法。然后,我们利用 `random` 模块生成含有 1~10000 个数据的随机数组,并对其进行排序。我们分别对含有 1~10000 个数据的数组进行排序,并输出排序所需的时间。最后,我们利用 `matplotlib` 模块绘制了数据量与运行时间的图表。
阅读全文