您的位置:首页 > 编程语言 > Python开发

算法导论—堆排序(python)

2015-04-05 19:36 190 查看
华电北风吹

天津大学任职计算与应用重点实验室

最后修改日期:2015/8/22

堆排序算法

先看第一个函数HeapAdjust,这个函数功能是在已经是构成堆的二叉树上,如果节点k数据变化了,对节点k进行修正,使之成为一个新的堆二叉树,n为数据长度。

def HeapAdjust(lst,k,n):
    while(2*k+1<n):
        j=2*k+1
        if j+1<n and lst[j]>lst[j+1]:
            j=j+1
        if lst[j]<lst[k]:
            temp=lst[k]
            lst[k]=lst[j]
            lst[j]=temp
            k=j
        else:
            break
    return lst


HeapSort函数,利用上面的第一个函数构建堆二叉树,并利用上面的函数进行排序

def HeapSort(lst):
    n=len(lst)
    for i in range(int(n/2)-1,-1,-1):
        lst=HeapAdjust(lst,i,n)
    print(lst)
    for i in range(n-1,0,-1):
        temp=lst[0]
        lst[0]=lst[i]
        lst[i]=temp
        lst=HeapAdjust(lst,0,i)
    return lst


测试函数

a=[1,5,2,8,3,4,6,9,7]
print(a)
result=HeapSort(a)
print(result)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: