堆排序法,

时间:2024-11-16 19:01:56

堆排序法是选择排序法的一种,是对简单排序法的改进,提高了效率.

首先是对堆的介绍,堆分为大根堆和小根堆.大根堆有两个充要条件:一是必须是一棵完全二叉树;二是对于堆中任意一个非子叶节点,都满足ki不小于k2i且ki不小于k(2i+1).因此k1

是堆中最大的的,因此名为大根堆,小根堆亦是如此.

假设待排序数组为A={95,76,66,50,36,12,25,36},将其实现从小到大排列.堆的核心方法主要有以下两个步骤:

1.将数组建成一个大根堆

2.取大根堆的根,让后将剩余数组再次调整为大根堆.反复执行步骤二,直到所有元素选择完毕.

首先介绍python中实现堆的模块heapq:

heapify(A):将数组A转化为堆,默认为小根堆

heappush(A,x):向堆A中添加元素x,得到的仍是堆

heappop(A)弹出堆A中最小的元素,并且维持剩余元素的堆结构

heapreplace(A,x):弹出堆A中最小的元素,然后将新元素x插入

用python实现堆排序法,定义名为Heapsort的堆排序函数,变量如下:

nums变量:表示待排序的数组名

result变量:表示返回的排序结果列表

函数定义如下:

import heapq

def Heapsort(nums):
    # 将列表转换为堆结构
    heapq.heapify(nums)
    result = []
    # 循环直到堆为空
    while nums:
        # 移除并返回堆顶元素
        result.append(heapq.heappop(nums))
    return result

输入;

x=[13,354,23,145,75,12]
print(Heapsort(x))

输出

[12, 13, 23, 75, 145, 354]