相关概念

堆是一种完全二叉树,即按从上到下,从左到右生成的二叉树。

堆有两种类型: 大根堆,小根堆。

大根堆:每个结点的值都大于或等于左右孩子结点。

小根堆:每个结点的值都小于或等于左右孩子结点。

计算某个节点的父节点和两个子节点

如上图,选取3这个节点,他的序号:i = 3

父节点:parent = ( i - 1 ) / 2 = 1 (这里进行的是取整)

左子节点:c1 = 2i + 1 = 7

右子节点:c2 = 2i + 2 = 8

堆排序的步骤

第一步:能够将某一节点及其子节点堆化(heapify);

第二步:从最后一个父节点开始,向前对他们进行第一步操作,最终得到一个大根堆;

第三步:将根节点值(最大值)和最后一个节点值进行交换;

第四步:将除最后一个节点外的元素,进行堆化操作。

复制代码

堆化某一节点和其子节点

def heapify(tree, node, i):

对 i 节点进行堆化,i 是 parent 节点

需要找到 i 的两个子节点

c1 = 2 * i + 1

c2 = 2 * i + 2

需要找出 i,c1,c2 这三个节点中的最大值

先假设 i 为最大值

max_node = i

判断 c1和c2 是否存在,找到最大值的下标,即max_node

if c1 < node and tree[c1] > tree[max_node]:

max_node = c1

if c2 < node and tree[c2] > tree[max_node]:

max_node = c2

max_node 不等于 i,则说明存在子节点大于 i这个父节点

将这个子节点的值和父节点的值进行交换,最大值成为根节点

if max_node != i:

tree[i], tree[max_node] = tree[max_node], tree[i]

heapify(tree, node, max_node)

堆排序

def heapSort(arr):

n = len(arr)

last_parent = (n - 2) // 2

从最后一个父节点开始向前进行 heapify 操作

将 arr 堆化,最大值成为根节点

for i in range(last_parent, -1, -1):

heapify(arr, n, i)

for i in range(n - 1, 0, -1):

# 将根节点和最后一个节点进行值交换

arr[i], arr[0] = arr[0], arr[i]

# 剩下的 i 个节点进行 heapify

heapify(arr, i, 0)

lis = [2, 3, 5, 1, 6]

heapSort(lis)

print(lis)

python堆排序的库_Python:堆排序相关推荐

  1. python 的blaze库_Python 开发者 2017 应该关注的 7 个类库

    Python 开发者 2017 应该关注的 7 个类库 jango 依然是 Python 开发者值得信赖的库 .然而,在 2016 年几个还不太知名的库引起了 Python 开发者的关注.在这篇博文中 ...

  2. python语言函数库_Python 的标准库,从0到1学Python

    1.1. 介绍软件测试业务流程的梳理技巧 - 乐搏软件教育 - 软件测试 - Powered By EduSoho​17lebo.com Python 的标准库包括了很多的模块, 从 Python 语 ...

  3. python连接opencv库_python环境下安装opencv库的方法

    注意:安装opencv之前需要先安装numpy,matplotlib等 一.安装方法 方法一.在线安装 1.先安装opencv-python pip install opencv-python --u ...

  4. python的api库_python 利用toapi库自动生成api

    在学习做接口测试自动化的时候,我们往往会自己动手写一些简单的API,比如写一个简单的TODO API之类. 不过自己写API的时候经常需要造一些假数据,以及处理分页逻辑,开始的时候还觉得比较有意思,但 ...

  5. python自然语言处理库_Python自然语言处理工具库(含中文处理)

    自然语言处理(Natural Language Processing,简称 NLP),是研究计算机处理人类语言的一门技术.随着深度学习在图像识别.语音识别领域的大放异彩,人们对深度学习在 NLP 的价 ...

  6. python调用 matlab库_python调用matlab的搜索结果-阿里云开发者社区

    2018python技术问答集锦,希望能给喜欢python的同学一些帮助 小编发现问答专区中有很多人在问关于python的问题,小编把这些问题汇总一下,希望能给喜欢python的大家一些启示和帮助 本 ...

  7. python 交互式可视化库_Python 交互式可视化库

    Python 交互式可视化库 所属分类:中间件编程 开发工具:Python 文件大小:12843KB 下载次数:1 上传日期:2018-12-06 18:40:56 上 传 者:孤独的老张 说明: 一 ...

  8. python自然语言处理库_Python 自然语言处理(NLP)工具库汇总

    最近正在用nltk 对中文网络商品评论进行褒贬情感分类,计算评论的信息熵(entropy).互信息(point mutual information)和困惑值(perplexity)等(不过这些概念我 ...

  9. python如何下载库_python中如何下载库

    python下载安装库的方法: 1.在线安装 在cmd窗口直接运行:pip install 包名,如 pip install requests 注意:这种方式安装时会自动下载第三方库,安装完成后并不会 ...

  10. python的opencv库_python环境下安装opencv库的方法

    注意:安装opencv之前需要先安装numpy,matplotlib等 一.安装方法 方法一.在线安装 1.先安装opencv-python pip install opencv-python --u ...

最新文章

  1. OpenCV中检测ChArUco的角点(2)
  2. C++11中的Lambda表达式
  3. DropDownList 不能有多个项被选定
  4. Samba nsswitch/pam_winbind.c文件输入验证漏洞
  5. boost::math模块计算艾里函数的零点的测试程序
  6. (一) shario教程资料
  7. javas的四种状态 无锁状态 偏向锁状态 轻量级锁状态 重量级锁状态
  8. 20170808上课笔记
  9. 写给对前途迷茫的朋友
  10. App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计
  11. 数字递减(5秒钟跳转页面)
  12. XcodeGhost事件冷思考:智能时代的达摩克利斯之剑
  13. Teststand中那些和LabVIEW里不一致的让人疑惑的规则
  14. python初学问题:IndentationError: expected an indented block
  15. STC15系列单片机-I/O口小结
  16. 如何恢复计算机管理员帐号,如何恢复装系统时建的计算机管理员账户
  17. 全球各大网站的服务器使用什么操作系统和WEB服务器(转)
  18. 【iOS沉思录】Objective-C语言的动态性总结(编译时与运行时)
  19. 某鉴黄师:“我并不幸福”,AI加持下CDN鉴黄又是何物?
  20. C++11 boost::spirit::qi简单的XML解析器示例

热门文章

  1. 基于JAVA+SpringBoot+Mybatis+MYSQL的社区物业管理系统
  2. 基于JAVA+SpringMVC+Mybatis+MYSQL的高校学生健康档案管理系统
  3. 【链接】Eclipse中快速打开文件所在的文件夹位置
  4. @WebService作用
  5. 【算法14】找出数组中两个只出现一次的数字
  6. vue 判断对象不为空_Vue 学习笔记(二):实例
  7. 百万数据php7取出循环_用php处理百万级以上的数据
  8. mysql索引实现原理_Mysql索引原理
  9. 微课|中学生可以这样学Python(5.6.1节):列表推导式2
  10. python遍历链表_四种常见链表的实现及时间复杂度分析(Python3版)