码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序(python)

时间:2015-04-06 09:01:20      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

堆排序算法

先看第一个函数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)


堆排序(python)

标签:

原文地址:http://blog.csdn.net/zhangzhengyi03539/article/details/44889951

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!