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使用PyV8执行javascript代码示例分享
Dec 04 Python
Python中super关键字用法实例分析
May 28 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
Python+PIL实现支付宝AR红包
Feb 09 Python
python实现图片识别汽车功能
Nov 30 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
Python随机数函数代码实例解析
Feb 09 Python
Python文件读写w+和r+区别解析
Mar 26 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 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
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
2017/04/28 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
Python实现计算最小编辑距离
2016/03/17 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
python函数的万能参数传参详解
2019/07/26 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
python中怎么表示空值
2020/06/19 Python
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
物业管理大学生个人的自我评价
2013/10/10 职场文书
教师对学生的寄语
2014/04/03 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
通知函格式范文
2015/04/27 职场文书
证婚人致辞精选
2015/07/28 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
用php如何解决大文件分片上传问题
2021/07/07 PHP
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL