简单的堆排序-python

AA = raw_input().strip().split(' ')
A = []
###############初始化大堆###############
def fixUp(A):
    k = len(A) - 1
    while k >= 0 and A[k // 2] < A[k]:
        A[k // 2], A[k] = A[k],A[k // 2]
        k = k // 2
for num in AA:
    A.append(int(num))
    fixUp(A)
#######################排序调整过程###########    
def fixDown(A):
    A.insert(0,-1)
    N = len(A) -1
    k = 1
    while 2*k <= N:
        j = 2 * k
        if j < N and A[j] < A[j + 1]:
            j = j + 1
        if  A[k] < A[j]:
            A[k],A[j ] = A[j],A[k]
            k = j
        else:
            break
    A.remove(-1)
    print A
def delMaxElem(A):
    maxElem = A[0]
    N = len(A)
    if N <= 0:
        print "No array"
    if N == 1:
        return maxElem
    else:
        A[0] = A.pop()
        fixDown(A)
        return maxElem
###########sort##############
result = []
for i in range(len(A)):
    result.append(delMaxElem(A))
print result
原文地址:https://www.cnblogs.com/Kermit-Li/p/5600699.html