算法导论-Python实现-堆排序

堆排序:
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,平均时间复杂度均为O(nlogn),与归并算法排序相比较的优点是它在数据的原地址进行排序,不需要额外的空间存储临时数据。堆是二叉树的一种。在代码实现过程中使用的是数组对堆进行存储。
如下图所示,是数组A=(4, 1, 3, 2, 16, 9, 10, 14, 8, 7)的最大堆示意图:
这里写图片描述
Max_Heapify函数实现过程:
这里写图片描述
Build_Max_Heap函数调用Max_Heapify函数实现过程:
这里写图片描述
Python代码实现:

global A_Heapsize
A_Heapsize = 0


def Max_Heapify(A, i):
    L = 2*i + 1
    R = 2*i + 2
    largest = i
    if L < A_Heapsize:
        if A[L] > A[i]:
            largest = L
    else:
        largest = i
    if R < A_Heapsize:
        if A[R] > A[largest]:
            largest = R
    if largest != i:
        temp = A[largest]
        A[largest] = A[i]
        A[i] = temp
        Max_Heapify(A, largest)
    return 0


def Build_Max_Heap(A):
    for i in range(int(A_Heapsize/2), -1, -1):
        Max_Heapify(A, i)
    return 0


def Heapsort(A):
    global A_Heapsize
    A_Heapsize = len(A)
    Build_Max_Heap(A)
    for i in range(A_Heapsize-1, 0, -1):
        temp = A[i]
        A[i] = A[0]
        A[0] = temp
        A_Heapsize -= 1
        Max_Heapify(A, 0)


A = [4, 1, 3, 2, 16, 9, 10, 14, 8, 7]
print('Before sort:', A)
Heapsort(A)
print('After sort:', A)

运行结果:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值