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爬虫代理IP池实现方法
Jan 05 Python
详解python里使用正则表达式的分组命名方式
Oct 24 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
Jan 04 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
Python中创建二维数组
Oct 17 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
浅析PyTorch中nn.Module的使用
Aug 18 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
Python爬虫开发与项目实战
Dec 16 Python
python基础之类属性和实例属性
Oct 24 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中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
php的debug相关函数用法示例
2016/07/11 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
用JS实现的一个include函数
2007/07/21 Javascript
Jquery选择器 $实现原理
2009/12/02 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
python文件和目录操作方法大全(含实例)
2014/03/12 Python
python k-近邻算法实例分享
2014/06/11 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
简单了解python变量的作用域
2019/07/30 Python
Python字符串的修改方法实例
2019/12/19 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
学院书画协会部门职责
2013/11/28 职场文书
2014年销售部工作总结
2014/12/01 职场文书
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript