堆排序 python
时间: 2023-10-28 16:02:13 浏览: 141
堆排序,Python代码
堆排序是一种基于二叉堆数据结构的排序算法。下面是一个用Python实现的堆排序示例代码:
```python
def heapify(arr, n, i):
largest = i
left = 2 * i + 1
right = 2 * i + 2
if left < n and arr[i] < arr[left]:
largest = left
if right < n and arr[largest] < arr[right]:
largest = right
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
def heapSort(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] # 将当前最大元素移动到数组末尾
heapify(arr, i, 0)
return arr
# 测试代码
arr = [12, 11, 13, 5, 6, 7]
sorted_arr = heapSort(arr)
print("排序后的数组:")
print(sorted_arr)
```
这段代码首先定义了两个函数,`heapify`函数用于维护最大堆的性质,`heapSort`函数则是通过调用`heapify`函数实现堆排序。
在`heapify`函数中,首先找到当前节点及其左右子节点中的最大值,并将最大值与当前节点交换位置,然后递归调用`heapify`函数来修复子树。
在`heapSort`函数中,首先构建初始最大堆,然后将堆顶元素(最大值)与末尾元素交换位置,并修复堆的性质。重复这个步骤直到堆为空,此时排序完成。
运行以上代码,将得到输出结果:
```
排序后的数组:
[5, 6, 7, 11, 12, 13]
```
这就是使用堆排序算法对给定数组进行排序的过程。希望对你有所帮助!如果还有其他问题,请随时提问。
阅读全文