Skip to content

堆排序 #6

@zlican77

Description

@zlican77
#堆排序
def sift(li,low,high):   #将单堆向下排序
    i = low
    j = 2* i+1
    tmp = li[low]
    while j <= high:
        if j + 1<=high and li[j+1] > li[j]:
            j = j + 1
        if li[j]>tmp:
            li[i] = li[j]
            i = j 
            j = 2* i + 1 
        else:
            li[i] = tmp
            break 
    else:
        li[i] = tmp

def heap_sort(li):
    n = len(li)
    for i in range((n-2)//2,-1,-1):    #反向遍历完成整堆排序
        sift(li,i,n-1)
    for i in range(n-1,-1,-1):    #将堆顶放出,再进行大单堆排序,反复操作
        li[0],li[i] = li[i],li[0]
        sift(li,0,i-1)

li = [i for i in range(100)]    #出数
import random
random.shuffle(li)
print(li)
heap_sort(li)
print(li)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions