热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python堆排序的库_heapy():python自帶的堆排序

堆是一個二叉樹,其中每個父節點的值都小於或等於其所有子節點的值。整個堆的最小元素總是位於二叉樹的根節點。python的heapq模塊提供了對堆的支持。堆數據結構最重要

堆是一個二叉樹,其中每個父節點的值都小於或等於其所有子節點的值。整個堆的最小元素總是位於二叉樹的根節點。python的heapq模塊提供了對堆的支持。 堆數據結構最重要的特征是heap[0]永遠是最小的元素

1. heap為定義堆,item增加的元素

heapq.heappush(heap,item)

>>> import heapq

>>> h = []

>>> heapq.heappush(h,2)

>>> h

[2]

2. 將列表轉換為堆

heapq.heapify(list)

>>> list = [1,2,3,5,1,5,8,9,6]

>>> heapq.heapify(list)

>>> list

[1, 1, 3, 5, 2, 5, 8, 9, 6]

3. 刪除最小值,因為堆的特征是heap[0]永遠是最小的元素,所以一般都是刪除第一個元素

heapq.heappop(heap)

>>> list

[1, 1, 3, 5, 2, 5, 8, 9, 6]

>>> heapq.heappop(list)

1

>>> list

[1, 2, 3, 5, 6, 5, 8, 9]

4. 刪除最小元素值,添加新的元素值

heapq.heapreplace(heap.item)

>>> list

[1, 2, 3, 5, 6, 5, 8, 9]

>>> heapq.heapreplace(list,99)

1

>>> list

[2, 5, 3, 9, 6, 5, 8, 99]

5. 首先判斷添加元素值與堆的第一個元素值對比,如果大,則刪除第一個元素,然后添加新的元素值,否則不更改堆

heapq.heapreplace(heap,item)

>>> list

[2, 5, 3, 9, 6, 5, 8, 99]

>>> heapq.heappushpop(list,6)

2

>>> list

[3, 5, 5, 9, 6, 6, 8, 99]

>>> heapq.heappushpop(list,1)

1

>>> list

[3, 5, 5, 9, 6, 6, 8, 99]

6. 將多個堆合並

heapq.merge(…)

>>> list

[3, 5, 5, 9, 6, 6, 8, 99]

>>> h

[1000]

>>> for i in heapq.merge(h,list):

... print(i,end=" ")

...

3 5 5 9 6 6 8 99 1000

7. 查詢堆中的最大元素,n表示查詢元素個數

heapq.nlargest(n,heap)

>>> list

[3, 5, 5, 9, 6, 6, 8, 99]

>>> heapq.nlargest(3,list)

[99, 9, 8]

>>>

8. 查詢堆中的最小元素,n表示查詢元素的個數

heapq.nsmallest(n,heap)

>>> list

[3, 5, 5, 9, 6, 6, 8, 99]

>>> heapq.nsmallest(3,list)

[3, 5, 5]

9. 用heapy建立大頂堆:將數據以相反數的形式存入堆,再以相反數的形式取出

push(e) --->>> push(-e)

pop(e) --->>> pop(-e)

參考文獻:



推荐阅读
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 双指针法在链表问题中应用广泛,能够高效解决多种经典问题,如合并两个有序链表、合并多个有序链表、查找倒数第k个节点等。本文将详细介绍这些应用场景及其解决方案。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 【问题描述】给定一个单向链表,要求使用Java编程语言实现从链表尾部到头部的逆序打印功能。该功能通过利用栈的数据结构来实现,最终将结果存储在一个ArrayList中返回。具体实现步骤如下:1. 遍历链表,将每个节点的值依次压入栈中。2. 从栈中逐个弹出元素,并将其添加到ArrayList中。3. 返回包含逆序链表元素的ArrayList。这种方法充分利用了栈的后进先出特性,确保链表元素能够按照从尾到头的顺序被正确处理。 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 使用多项式拟合分析淘宝双11销售趋势
    根据天猫官方数据,2019年双11成交额达到2684亿元,再次刷新历史记录。本文通过多项式拟合方法,分析并预测未来几年的销售趋势。 ... [详细]
  • 作文记录:合并区间的技巧与应用
    本文详细记录了合并区间问题的解题技巧与应用场景。首先介绍了问题背景和题目描述,接着从排序最大值的角度探讨了解决思路,并提供了具体的程序代码及运行结果。此外,还探讨了其他可能的解决方案。最后,对整个解题过程进行了总结,为读者提供了全面的理解和参考。 ... [详细]
  • 在C++程序中,文档A的每一行包含一个结构体数据,其中某些字段可能包含不同数量的数字。需要将这些结构体数据逐行读取并存储到向量中,随后不仅在控制台上显示,还要输出到新创建的文档B中。希望得到指导,感谢! ... [详细]
author-avatar
何卫先生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有