def max_root_heap(nums, s, e):
'''
构造大根堆
:param nums:
:param s: 起始索引
:param e: 结束索引
:return:
'''
for i in range(s, e + 1):
c = 2 * i + 1
if c < e:
if nums[c] < nums[c + 1]: // 保证c指向最大孩子结点
c += 1
elif c == e:
pass
else:
break
if nums[c] > nums[i]: // 交换最大子结点与父结点
nums[c], nums[i] = nums[i], nums[c]
def heap_sort(nums):
'''
堆排序
:param nums: 待排序数组
:return:
'''
len_nums = len(nums)
for i in range((len_nums - 1) // 2, -1, -1): // 构造一次大根堆
max_root_heap(nums, i, len_nums - 1)
for i in range(len_nums): // 将根结点放到最后,再构造大根堆
nums[0], nums[len_nums - 1 - i] = nums[len_nums - 1 - i], nums[0]
for j in range(((len_nums - 1) // 2), -1, -1):
max_root_heap(nums, j, len_nums - 1 - i - 1)
def main():
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5, 45, 3, 2, 65, 6, 76, 87, 8, 8, 98, 11, 31, 254, 1, 2, 544, 543, 5]
heap_sort(nums)
print(nums)
if __name__ == '__main__':
main()
堆排序 python
最新推荐文章于 2024-09-29 16:46:50 发布
本文介绍了如何使用Python实现大根堆(maxheap)的数据结构以及基于大根堆的堆排序算法,通过`max_root_heap`函数构造堆,`heap_sort`函数进行排序,最后在`main`函数中展示了整个过程。
摘要由CSDN通过智能技术生成