zoukankan      html  css  js  c++  java
  • 排序算法 (08.堆排序)

    什么是堆

    1.所有 父节点 的值 都大于 (小于)子节点 的 值
    2.属于完全 二叉树
    

    堆排序思路

    1.先定义一个调整堆的函数, 保证以 某点为 父节点进行调整, 并且保证 不 打乱 
    子节点 以下的 子树的 堆结构 , 所以 用到 递归思想
    2.从头遍历 到 树尾, 先进行 首尾交换, 再进行 构建 堆
    

    代码实现

    
    # 堆调整:
    def heapify(tree, n, i):
        if i >= n:
            return
        max = i
        c1 = 2*i + 1
        c2 = 2*i + 2
        if tree[c1] and tree[c1] > tree[max]:
            max = c1
        if tree[c2] and tree[c2] > tree[max]:
            max = c2
        if max != i :
            #交换两个值
            tree[max], tree[i] = tree[i], tree[max]
            heapify(tree , n, max)
    
    #build堆
    def build_heap(tree, n):
        i = (n - 1) / 2
        while i >= 0:
            heapify(tree, n, i)
            i -= 1
    #堆排序
    def heap(tree, n):
        for i in range(0, n):
            tree[n-1],tree[0] = tree[0],tree[n-1]
            build_heap(tree, n-1)
    
  • 相关阅读:
    iOS 图片加载
    viewController 生命周期 转
    @import和@class的区别
    git 使用总结
    iOS开发 关于property的简单总结
    Swift-6-函数
    Swift-5-流程控制
    Swift-4-数组和字典
    Swift-3-字符串和字符
    Swift-2-基本操作符
  • 原文地址:https://www.cnblogs.com/jackson1/p/12742291.html
Copyright © 2011-2022 走看看