跟我一起学 - 算法导论 - 堆

简介:
# encoding:UTF-8
#
 [递归] - 单条路 自下往上排序 
def  heap_adjust(data, s, m):
    
if   2   *  s  >  m: return
   
    
#  声明 预设父节点位置
    temp  =  s  -   1
    
    
#  [左]子节点值 大于 父节点值  :  预设父节点位置 为 左子节点位置
     if  data[ 2 * -   1 >  data[temp]: temp  =   2 * s - 1
    
    
#  [右]子节点值 大于 预设父节点 : 预设父节点位置 为 右子节点位置
     if   2   *  s  <=  m  -   1   and  data[ 2 * s]  >  data[temp]: temp  =   2   *  s
    
    
#  交换值 满足 堆特性 此为 [ 父节点 小于 子节点  ]
     if  temp  <>  s  -   1 :
        data[s 
-   1 ], data[temp]  =  data[temp], data[s  -   1 ]
        heap_adjust(data, temp 
+   1 , m)


def  heap_sort(data):
    m 
=  len(data)  /   2
    
#  构建 堆树
     #  测试数据 [3,2,1] 数组值为 所以非底层叶节点
     for  i  in  range(m , 0,  - 1 ):
        heap_adjust(data, i, len(data))

    
    
#  从堆树中 [出栈] 排序输出
     #  测试数据 [5, 4, 3, 2]
    data[0], data[ - 1 =  data[ - 1 ], data[0]
    
for  n  in  range(len(data)  -   1 1 - 1 ):
        heap_adjust(data, 
1 , n)
        data[0], data[n 
-   1 =  data[n - 1 ], data[0]



data
= [ 2 , 3 , 6 , 3 , 868 , 9 , 8 , - 1 ]
heap_sort(data)
print  data
#  [-1, 2, 3, 3, 6, 8, 9, 868]
转自 【  http://www.cppblog.com/guogangj/  】
堆存储
 



堆 入栈 复杂度为Ο(logn)





堆 出栈  Ο(logn)

本文转自博客园刘凯毅的博客,原文链接:跟我一起学 - 算法导论 - 堆,如需转载请自行联系原博主。


目录
相关文章
|
2月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
85 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
7月前
|
存储 机器学习/深度学习 算法
数据结构与算法:堆
朋友们大家好啊,本篇文章来到堆的内容,堆是一种完全二叉树,再介绍堆之前,我们首先对树进行讲解
数据结构与算法:堆
|
4月前
|
数据采集 算法
基于PSO粒子群算法的三角形采集堆轨道优化matlab仿真
该程序利用PSO算法优化5个4*20矩阵中的模块采集轨迹,确保采集的物品数量及元素含量符合要求。在MATLAB2022a上运行,通过迭代寻优,选择最佳模块组合并优化轨道,使采集效率、路径长度及时间等综合指标最优。具体算法实现了粒子状态更新、需求量差值评估及轨迹优化等功能,最终输出最优轨迹及其相关性能指标。
|
5月前
|
算法 Java 开发者
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
43 0
|
5月前
|
存储 算法 Java
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
81 0
|
5月前
|
算法 安全 调度
逆天改命!Python高级数据结构堆(Heap)与优先队列,让你的算法效率飙升至宇宙级!
【7月更文挑战第8天】Python的heapq模块和queue.PriorityQueue实现了堆和优先队列,提供高效算法解决方案。堆用于Dijkstra算法求解最短路径,例如在图论问题中;PriorityQueue则在多线程下载管理中确保高优先级任务优先执行。这两个数据结构提升效率,简化代码,是编程中的强大工具。
63 0
|
6月前
|
存储 算法
【数据结构和算法】---二叉树(2)--堆的实现和应用
【数据结构和算法】---二叉树(2)--堆的实现和应用
29 0
|
7月前
|
存储 机器学习/深度学习 算法
数据结构与算法⑬(第四章_中_续二)堆解决Topk问题+堆的概念选择题
数据结构与算法⑬(第四章_中_续二)堆解决Topk问题+堆的概念选择题
60 3
|
6月前
|
存储 算法 Java
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
|
7月前
|
Arthas 监控 算法
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收算法评价标准、标记清除算法、复制算法、标记整理算法、分代垃圾回收算法等内容。
88 0
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法