zoukankan      html  css  js  c++  java
  • 堆排序

    import random
    
    def generate_big_root_heap(li,low,hight):
        i = low
        j = 2 * i + 1
        tmp = li[i]
        while j <= hight:
            if j + 1 <= hight and li[j+1] > li[j]:
                j = j + 1
            if li[j] > tmp:
                li[i] = li[j]
                i = j
                j = 2 * i + 1
            else:
                break
        li[i] = tmp
    
    def generate_low_root_heap(li,low,hight):
        i = low
        j = 2 * i + 1
        tmp = li[low]
        while j <= hight:
            if j + 1 <= hight and li[j+1] < li[j]:
                j = j + 1
            if li[j] < tmp:
                li[i] = li[j]
                i = j
                j = 2 * i + 1
            else:
                break
        li[i] = tmp
    
    def heap_sort(li):
        n = len(li)
        # 建堆
        for i in range((n-1-1)//2,-1,-1):
            # generate_big_root_heap(li,i,n-1)    # 大根堆
            generate_low_root_heap(li,i,n-1)    # 小根堆
        print(li)
        # 堆向下调整
        for i in range(n-1,-1,-1):
            li[i], li[0] = li[0], li[i]
            # generate_big_root_heap(li,0,i-1)    # 大根堆
            generate_low_root_heap(li,0,i-1)    # 小根堆
    
    
    def main():
        li = [i for i in range(100)]
        random.shuffle(li)
        print(li)
        heap_sort(li)
        print(li)
    
    if __name__ == '__main__':
        main()
    

      

  • 相关阅读:
    新的开始——3.3
    第一个周末——3.2
    恋爱知识大增——周五3.1
    相安无事——周四2.28
    好几天没写了。。。——周三2.27
    开学第二天——2.26
    开学第一天——2.25
    华为
    微软 Microsoft
    谷歌 google
  • 原文地址:https://www.cnblogs.com/navysummer/p/15580698.html
Copyright © 2011-2022 走看看