用Python写出堆排序算法
时间: 2023-07-12 16:06:07 浏览: 89
下面是Python实现的堆排序算法:
```python
def heapify(arr, n, i):
largest = i # 初始化最大元素为父节点
l = 2 * i + 1 # 左子节点
r = 2 * i + 2 # 右子节点
# 如果左子节点比父节点大,更新最大元素为左子节点
if l < n and arr[largest] < 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)
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[0], arr[i] = arr[i], arr[0]
heapify(arr, i, 0)
return arr
```
其中,`heapify`函数用于将一个节点及其子树调整为最大堆;`heapSort`函数用于构建最大堆并依次取出堆顶元素,直到所有元素都放入有序区间。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)