python堆排序的库_Python:堆排序
相关概念
堆是一种完全二叉树,即按从上到下,从左到右生成的二叉树。
堆有两种类型: 大根堆,小根堆。
大根堆:每个结点的值都大于或等于左右孩子结点。
小根堆:每个结点的值都小于或等于左右孩子结点。
计算某个节点的父节点和两个子节点
如上图,选取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:堆排序相关推荐
- python 的blaze库_Python 开发者 2017 应该关注的 7 个类库
Python 开发者 2017 应该关注的 7 个类库 jango 依然是 Python 开发者值得信赖的库 .然而,在 2016 年几个还不太知名的库引起了 Python 开发者的关注.在这篇博文中 ...
- python语言函数库_Python 的标准库,从0到1学Python
1.1. 介绍软件测试业务流程的梳理技巧 - 乐搏软件教育 - 软件测试 - Powered By EduSoho17lebo.com Python 的标准库包括了很多的模块, 从 Python 语 ...
- python连接opencv库_python环境下安装opencv库的方法
注意:安装opencv之前需要先安装numpy,matplotlib等 一.安装方法 方法一.在线安装 1.先安装opencv-python pip install opencv-python --u ...
- python的api库_python 利用toapi库自动生成api
在学习做接口测试自动化的时候,我们往往会自己动手写一些简单的API,比如写一个简单的TODO API之类. 不过自己写API的时候经常需要造一些假数据,以及处理分页逻辑,开始的时候还觉得比较有意思,但 ...
- python自然语言处理库_Python自然语言处理工具库(含中文处理)
自然语言处理(Natural Language Processing,简称 NLP),是研究计算机处理人类语言的一门技术.随着深度学习在图像识别.语音识别领域的大放异彩,人们对深度学习在 NLP 的价 ...
- python调用 matlab库_python调用matlab的搜索结果-阿里云开发者社区
2018python技术问答集锦,希望能给喜欢python的同学一些帮助 小编发现问答专区中有很多人在问关于python的问题,小编把这些问题汇总一下,希望能给喜欢python的大家一些启示和帮助 本 ...
- python 交互式可视化库_Python 交互式可视化库
Python 交互式可视化库 所属分类:中间件编程 开发工具:Python 文件大小:12843KB 下载次数:1 上传日期:2018-12-06 18:40:56 上 传 者:孤独的老张 说明: 一 ...
- python自然语言处理库_Python 自然语言处理(NLP)工具库汇总
最近正在用nltk 对中文网络商品评论进行褒贬情感分类,计算评论的信息熵(entropy).互信息(point mutual information)和困惑值(perplexity)等(不过这些概念我 ...
- python如何下载库_python中如何下载库
python下载安装库的方法: 1.在线安装 在cmd窗口直接运行:pip install 包名,如 pip install requests 注意:这种方式安装时会自动下载第三方库,安装完成后并不会 ...
- python的opencv库_python环境下安装opencv库的方法
注意:安装opencv之前需要先安装numpy,matplotlib等 一.安装方法 方法一.在线安装 1.先安装opencv-python pip install opencv-python --u ...
最新文章
- OpenCV中检测ChArUco的角点(2)
- C++11中的Lambda表达式
- DropDownList 不能有多个项被选定
- Samba nsswitch/pam_winbind.c文件输入验证漏洞
- boost::math模块计算艾里函数的零点的测试程序
- (一) shario教程资料
- javas的四种状态 无锁状态 偏向锁状态 轻量级锁状态 重量级锁状态
- 20170808上课笔记
- 写给对前途迷茫的朋友
- App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计
- 数字递减(5秒钟跳转页面)
- XcodeGhost事件冷思考:智能时代的达摩克利斯之剑
- Teststand中那些和LabVIEW里不一致的让人疑惑的规则
- python初学问题:IndentationError: expected an indented block
- STC15系列单片机-I/O口小结
- 如何恢复计算机管理员帐号,如何恢复装系统时建的计算机管理员账户
- 全球各大网站的服务器使用什么操作系统和WEB服务器(转)
- 【iOS沉思录】Objective-C语言的动态性总结(编译时与运行时)
- 某鉴黄师:“我并不幸福”,AI加持下CDN鉴黄又是何物?
- C++11 boost::spirit::qi简单的XML解析器示例
热门文章
- 基于JAVA+SpringBoot+Mybatis+MYSQL的社区物业管理系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的高校学生健康档案管理系统
- 【链接】Eclipse中快速打开文件所在的文件夹位置
- @WebService作用
- 【算法14】找出数组中两个只出现一次的数字
- vue 判断对象不为空_Vue 学习笔记(二):实例
- 百万数据php7取出循环_用php处理百万级以上的数据
- mysql索引实现原理_Mysql索引原理
- 微课|中学生可以这样学Python(5.6.1节):列表推导式2
- python遍历链表_四种常见链表的实现及时间复杂度分析(Python3版)