python堆排序

来源:互联网 发布:文网文添加域名 编辑:程序博客网 时间:2024/06/05 13:56
#coding:utf-8#沿左,右子节点较大者依次往下调整def heapify( array, i, n ):#把某个结点下的所有子树更新成大顶堆    j = i * 2 + 1    while j < n:        if j + 1 < n and array[j] < array[j + 1]:#左孩子和右孩子中取最大            j += 1        if array[i] > array[j]:            break        array[i], array[j] = array[j], array[i]        i = j        j = i * 2 + 1 #创建堆def build_heap( array ):    size = len( array )    for i in range( size // 2 - 1, -1, -1 ):#遍历非叶结点        heapify( array, i, size ) #大顶堆排序def heap_sort( array ):    size = len( array )    build_heap( array )    #交换堆顶与最后一个结点,再调整堆    for i in range( size - 1, 0, -1 ):        array[0], array[i] = array[i], array[0]        heapify( array, 0, i ) a = [ -3, 1, 3, 0, 9, 7 ]heap_sort( a )print( a )

0 0
原创粉丝点击