数据结构之堆排序(python实现)

'''
特性:
1.最大堆的堆顶是整个堆中的最大元素
2.最小堆的堆顶是整个堆中的最小元素
堆排序算法的步骤:
1.把无序数组构建成二叉堆。需要从小到大排序,则构建成最大堆;需要从大到小排序,则构建成最小堆。
2.循环删除堆顶元素,替换到二叉堆的末尾,调整堆产生新的堆顶。
'''
def downAdjust(string,parentIndex,length):
    #temp保存父节点值,用于最后的赋值
    temp=string[parentIndex]
    childIndex=parentIndex*2+1
    while childIndex<length:
        #如果有右孩子,且右孩子大于左孩子的值,则定位到右孩子
        if(childIndex+1<length and string[childIndex+1]>string[childIndex]):
            childIndex+=1
        #如果父节点大于任何一个孩子的值,则直接跳出
        if(temp>=string[childIndex]):
            break
        string[parentIndex]=string[childIndex]
        parentIndex=childIndex
        childIndex=parentIndex*2+1
    string[parentIndex]=temp

def headSort(string):
    #把无序数组构建成最大堆
    b=int((len(string) - 2) / 2)
    for i in range(b,-1,-1):
        downAdjust(string,i,len(string))
    print(string)
    #循环删除堆顶元素
    for j in range(len(string)-1,0,-1):
        temp=string[j]
        string[j]=string[0]
        string[0]=temp
        downAdjust(string,0,j)
string=[1,3,2,6,5,7,8,9,10]
headSort(string)
print(string)

你可能感兴趣的:(数据结构,python,数据结构,堆排序)