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 相关文章推荐
在Python中使用__slots__方法的详细教程
Apr 28 Python
Python中List.count()方法的使用教程
May 20 Python
python实现用户登录系统
May 21 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
Python跨文件全局变量的实现方法示例
Dec 10 Python
Python 查看文件的编码格式方法
Dec 21 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
目前最全的python的就业方向
Jun 05 Python
Django应用程序入口WSGIHandler源码解析
Aug 05 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
利用keras使用神经网络预测销量操作
Jul 07 Python
python openCV自制绘画板
Oct 27 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
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
用javascript操作xml
2006/11/04 Javascript
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
Javascript 中的类和闭包
2010/01/08 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
值得收藏的10道python 面试题
2019/04/15 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
如何利用python读取micaps文件详解
2020/10/18 Python
python 从list中随机取值的方法
2020/11/16 Python
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
印尼旅游网站:via
2017/11/12 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
单位刻章介绍信范文
2014/01/11 职场文书
善意的谎言事例
2014/02/15 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
导游词之无锡东林书院
2019/12/11 职场文书
解析Java异步之call future
2021/06/14 Java/Android