Python实现的堆排序算法原理与用法实例分析


Posted in Python onNovember 22, 2017

本文实例讲述了Python实现的堆排序算法。分享给大家供大家参考,具体如下:

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

具体代码如下:

#-*- coding: UTF-8 -*-
import numpy as np
def MakeHeap(a):
  for i in xrange(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 += 1
    if a[j] >= x :                  #若两个子节点均不小于该节点,则不同调整
      break
    a[i], a[j] = a[j], a[i]             #将节点i的数值与其子节点中最小者的数值进行对调
    i = j                        #将i赋为改变的子节点的索引
    j = i*2 + 1                   #将j赋为节点对应的左子节点
def HeapSort(a):
  MakeHeap(a)                 #构建小顶堆
  for i in xrange(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, 10, size = 10)
  print "Before sorting..."
  print "---------------------------------------------------------------"
  print a
  print "---------------------------------------------------------------"
  HeapSort(a)
  print "After sorting..."
  print "---------------------------------------------------------------"
  print a[::-1]                    #因为堆排序按大到小进行排列,采用a[::-1]对其按从小到大进行输出
  print "---------------------------------------------------------------"

运行结果:

Python实现的堆排序算法原理与用法实例分析

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Windows下用py2exe将Python程序打包成exe程序的教程
Apr 08 Python
python机器学习之神经网络(二)
Dec 20 Python
Python2中文处理纪要的实现方法
Mar 10 Python
解决Python selenium get页面很慢时的问题
Jan 30 Python
值得收藏的10道python 面试题
Apr 15 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
python socket通信编程实现文件上传代码实例
Dec 14 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 Python
基于PyInstaller各参数的含义说明
Mar 04 Python
Python实现的插入排序算法原理与用法实例分析
Nov 22 #Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 #Python
Python实现桶排序与快速排序算法结合应用示例
Nov 22 #Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 #Python
python不换行之end=与逗号的意思及用途
Nov 21 #Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 #Python
pycharm远程调试openstack代码
Nov 21 #Python
You might like
php daodb插入、更新与删除数据
2009/03/19 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
怎么用javascript进行拖拽
2006/07/20 Javascript
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
跨浏览器的事件对象介绍
2012/06/27 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
Windows下python3.6.4安装教程
2018/07/31 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Python按钮的响应事件详解
2019/03/04 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
物业管理大学生个人的自我评价
2013/10/10 职场文书
班组建设经验交流材料
2014/05/12 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers