python 堆排序的两种实现

import heapq
#-*- coding: UTF-8 -*-
import numpy as npdef MakeHeap(a):for i in range(int(a.size / 2) - 1, -1, -1):#对非叶子节点的子节点进行调节,构建堆AdjustHeap(a, i, a.size)def AdjustHeap(a, i, n):j = i*2 +1                                          #选择节点i的左子节点x = a[i]                                              #选择节点的数值while j < n:                                       #循环对子节点及其子树进行调整if j + 1 < n and a[j+1] < a[j]:        #找到节点i子节点的最小值j += 1if a[j] >= x :                                   #若两个子节点均不小于该节点,则不同调整breaka[i], a[j] = a[j], a[i]                         #将节点i的数值与其子节点中最小者的数值进行对调i = j                                               #将i赋为改变的子节点的索引j = i*2 + 1                                     #将j赋为节点对应的左子节点def HeapSort(a):MakeHeap(a)                                 #构建小顶堆for i in range(a.size - 1,0, -1):      #对堆中的元素逆向遍历a[i], a[0] = a[0], a[i]                      #将堆顶元素与堆中最后一个元素进行对调,因为小顶堆中堆顶元素永远最小,因此,输出即为最小元素AdjustHeap(a, 0, i)                    #重新调整使剩下的元素仍为一个堆if __name__ == '__main__':a = np.random.randint(0, 100, size = 10)print ("Before sorting...")print ("---------------------------------------------------------------")print (a)print ("---------------------------------------------------------------")a1=aHeapSort(a1)print ("After sorting...")print ("---------------------------------------------------------------")print (a1[::-1]  )                                     #因为堆排序按大到小进行排列,采用a[::-1]对其按从小到大进行输出print(a1)print( "---------------------------------------------------------------")b=list(a)heapq.heapify(b)heap = []while b:heap.append(heapq.heappop(b))b[:] = heapprint ('-------------------------------------------------')print ('sdk sorted',b)
Before sorting...
---------------------------------------------------------------
[92 97  3 60  8 67 13 65 35 94]
---------------------------------------------------------------
After sorting...
---------------------------------------------------------------
[ 3  8 13 35 60 65 67 92 94 97]
[97 94 92 67 65 60 35 13  8  3]
---------------------------------------------------------------
-------------------------------------------------
sdk sorted [3, 8, 13, 35, 60, 65, 67, 92, 94, 97]

posted on 2018-06-27 10:43 luoganttcc 阅读(...) 评论(...) 编辑 收藏

python 堆排序的两种实现相关推荐

  1. 周一02.3运行python程序的两种方式

    一.运行python程序的两种方式 方法一:交互式:                      优点:输入一行代码立刻返回结果                       缺点:无法永久保存代码 方法 ...

  2. python画图-python画图的两种方法

    python如何画图?这里给大家介绍两款python绘图的库:turtle和Matplotlib. 1 安装turtle Python2安装命令:pip install turtule Python3 ...

  3. python timer使用-Python timer定时器两种常用方法解析

    这篇文章主要介绍了Python timer定时器两种常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法一,使用线程中现成的: 这种一般 ...

  4. python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)...

    一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...

  5. 基础知识:编程语言介绍、Python介绍、Python解释器安装、运行Python解释器的两种方式、变量、数据类型基本使用

    阅读目录 今日学习内容: 1.编程语言的介绍 2.Python介绍 3.安装Python解释器(多版本共存) 4.运行Python解释器程序两种方式.(交互式与命令行式)(♥♥♥♥♥) 5.变量(♥♥ ...

  6. python 发送邮件的两种方式【终极篇】

    python 发送邮件的两种方式[终极篇] 一,利用python自带的库 smtplib简单高效 from email.mime.multipart import MIMEMultipart from ...

  7. Python案例:两种方法实现词频统计

    Python案例:两种方法实现词频统计 一.利用字典实现词频统计 1.编写源代码 2.查看运行结果 二.利用collections的Counter模块实现词频统计 <

  8. python有两个运行程序分别是什么_运行python程序的两种方式

    [单选题]I wonder why ________ are so interested in action movies. [单选题]项目经理的职责不包括以下哪项内容 ? [简答题]结合项目的特点和 ...

  9. python打开方式包括_运行Python程序有两种方式:________和________。

    运行Python程序有两种方式:________和________. 答: 交互式 文件式 自觉的人,心目中有一张蓝图,人生理想.但是不知道世界的游戏规则 答:× 山水画的鉴赏方法? 答:1.首先看风 ...

最新文章

  1. LeetCode实战:字符串转换整数 (atoi)
  2. Element UI——布局容器el-container子元素强制上下排列
  3. Kilim实现浅析(一)
  4. 查看Scala编译的.class文件
  5. 95-130-502-源码-source-ElasticSearch相关-ElasticSearch connector
  6. java线程和内核线程的,Java中内核线程理论及实例详解
  7. DropDownList如何绑定DataTable,如何绑定DataSet
  8. 人脸检测(十七)--Faceness-Net
  9. 新版谷歌flash的问题
  10. php判断字符串是否为空的方法
  11. 【笔记】初读《SICP》:递归和迭代
  12. 算法竞赛入门【码蹄集进阶塔335题】(MT2076-2100)
  13. vue如何把值放入数组里面去_vue的数组如何存储数据
  14. Photoshop插件-保存-8位通道-16位通道-脚本开发-PS插件
  15. GitHub上最火的40个iOS开源项目
  16. js 复制微信号码 并唤醒微信
  17. Android开发本地及网络Mp3音乐播放器(十七)已存在歌曲歌词下载
  18. 从git下载代码到本地
  19. 软件测试工程师培训大纲(2020版)正式发布
  20. MybatisPlus入门(涉及大部分常用操作)

热门文章

  1. 【转】Kettle集群
  2. 新书发布《每天5分钟玩转Docker容器技术》
  3. 查询时注意 查询字段传值参数类型,尽量和数据库字段类型一致
  4. 《OpenGL ES应用开发实践指南:Android卷》—— 2.2 不要从头开始
  5. 跨域调用报表展现页面的flash打印方法
  6. 我为什么还要造轮子?欠踹?Monk.UI表单美化插件诞生记!
  7. Revit二次开发示例:DeleteDimensions
  8. mysql 用一条sql语句修改两个表里的内容,一条sql语句update更新两个表
  9. 条件概率、全概率公式与贝叶斯公式
  10. 算法提高课-数学知识-矩阵乘法-AcWing 1303. 斐波那契前 n 项和:矩阵乘法,快速幂,线性代数