利用python编写一个实验程序,采用堆排序完成一个整数序列的递增排序,要求输出每次划分结果,并用相关数据进行测试
时间: 2024-03-02 07:53:58 浏览: 66
好的,以下是利用 Python 编写的堆排序程序:
```python
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]
print(arr) # 输出每次划分结果
heapify(arr, n, largest)
def heap_sort(arr):
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]
print(arr) # 输出每次划分结果
heapify(arr, i, 0)
# 测试数据
arr = [12, 11, 13, 5, 6, 7]
heap_sort(arr)
print("排序后的数组:")
print(arr)
```
在上面的代码中,`heapify` 函数用于构建堆,`heap_sort` 函数用于对整个序列进行排序。在 `heap_sort` 函数中,我们首先构建最大堆,然后从堆顶开始将元素逐个取出来放到末尾,再重新构建堆。这样就可以实现整数序列的递增排序。
我们可以使用一些测试数据来测试程序的正确性和效率:
```python
import random
import time
# 生成随机数列
arr = [random.randint(1, 10000) for i in range(1000)]
# 测试程序的正确性
heap_sort(arr)
assert arr == sorted(arr)
# 测试程序的效率
start_time = time.time()
heap_sort(arr)
end_time = time.time()
print("堆排序的运行时间:", end_time - start_time, "秒")
```
运行程序后,我们可以看到每次划分的结果,以及程序的运行时间。
阅读全文