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实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
Python操作json数据的一个简单例子
Apr 17 Python
Python中正则表达式的详细教程
Apr 30 Python
Python的装饰器使用详解
Jun 26 Python
python字符串循环左移
Mar 08 Python
关于python多重赋值的小问题
Apr 17 Python
python实现月食效果实例代码
Jun 18 Python
wxPython之wx.DC绘制形状
Nov 19 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
python爬取网易云音乐热歌榜实例代码
Aug 07 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
php实现源代码加密的方法
2015/07/11 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
PDO::_construct讲解
2019/01/27 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
JS二维数组的定义说明
2014/03/03 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
python中的多重继承实例讲解
2014/09/28 Python
Python对象体系深入分析
2014/10/28 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
Python调用C语言的实现
2019/07/26 Python
解决Django连接db遇到的问题
2019/08/29 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
架构师岗位职责
2013/11/18 职场文书
班级安全教育实施方案
2014/02/23 职场文书
九寨沟导游词
2015/02/02 职场文书
公司放假通知范文
2015/04/14 职场文书
初中毕业感言300字
2015/07/31 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
详解redis分布式锁的这些坑
2021/05/19 Redis
Python爬取某拍短视频
2021/06/11 Python
Python中第三方库Faker的使用详解
2022/04/02 Python
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js