堆排序——python实现

 
# 交换
def swap(a, x, y):
    t = a[x]
    a[x] = a[y]
    a[y] = t


# 寻找根节点
def heapify(a, n, i):
    c1 = 2 * i + 1
    c2 = 2 * i + 2
    max = i
    #找到根节点和它的两个子结点的并移动到根节点
    if c1 < n and a[c1] > a[max]:
        max = c1
    if c2 < n and a[c2] > a[max]:
        max = c2
    if max != i:
        swap(a, max, i)
        heapify(a, n, max)


# 创建堆
def build_heap(a, n):
    last_node = n - 1
    parent = int((last_node - 1) / 2)
    #从最后一个节点开始创建大根堆
    for i in range(parent, -1,-1):
        heapify(a, n, i)


# 实现堆排序
def heap_sort(a,n):
    #创建堆
    build_heap(a,n)
    for i in range(n-1,-1,-1):
        #将最大堆排到末尾
        swap(a,0,i)
        #从未排序堆中找出最大数
        heapify(a,i,0)


arr = [9, 4, 5, 3, 8, 1]
heap_sort(arr, len(arr))
print(arr)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值