#-*- 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实现的更多相关文章

  1. 算法导论 第六章 堆排序(python)

    6.1堆 卫星数据:一个带排序的的数通常是有一个称为记录的数据集组成的,每一个记录有一个关键字key,记录的其他数据称为卫星数据. 原地排序:在排序输入数组时,只有常数个元素被存放到数组以外的空间中去 ...

  2. 数据结构与算法-Python/C(目录)

    第一篇 基本概念 01 什么是数据结构 02 什么是算法 03 应用实例-最大子列和问题 第二篇 线性结构 01 线性表及其实现 02 堆栈 03 队列 04 应用实例-多项式加法运算 05 小白专场 ...

  3. 十大经典排序算法(Python,Java实现)

    参照:https://www.cnblogs.com/wuxinyan/p/8615127.html https://www.cnblogs.com/onepixel/articles/7674659 ...

  4. Python3标准库:heapq堆排序算法

    1. heapq堆排序算法 堆(heap)是一个树形数据结构,其中子节点与父节点有一种有序关系.二叉堆(binary heap)可以使用一个有组织的列表或数组表示,其中元素N的子元素位于2*N+1和2 ...

  5. 堆排序算法 java 实现

    堆排序算法 java 实现 白话经典算法系列之七 堆与堆排序 Java排序算法(三):堆排序 算法概念 堆排序(HeapSort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,可以利用数组的特 ...

  6. 必须知道的八大种排序算法【java实现】(三) 归并排序算法、堆排序算法详解

    一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ...

  7. 堆排序算法(C#实现)

    在软件设计相关领域,“堆(Heap)”的概念主要涉及到两个方面: 一种是数据结构,逻辑上是一颗完全二叉树,存储上是一个数组对象(二叉堆). 另一种是垃圾收集存储区,是软件系统可以编程的内存区域. 本文 ...

  8. pageRank算法 python实现

    一.什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google 产品经理),因为他是这个算法的发明者之一,还是google CEO( ...

  9. 常见排序算法-Python实现

    常见排序算法-Python实现 python 排序 算法 1.二分法     python    32行 right = length-  :  ]   ):  test_list = [,,,,,, ...

随机推荐

  1. MS08_067漏洞渗透攻击

    MS08_067漏洞渗透攻击实践 前期准备 kali和winxp要ping通 kali开启msfconsole: 同时在这里可以看到目前可攻击载荷个数一共是471个,也可以看到其他攻击的数量如图. 用 ...

  2. 《JDK 8.0 学习笔记》1~3章

    第一章 Java平台概论 了解Java的发展历程和相关术语如JDK.JVM.JRE等 第二章 从JDK到IDE 书本介绍了新建Java程序的注意事项以及在cmd和Eclipse环境下如何运行Java, ...

  3. 2017-2018-1 信息安全技术 实验二 20155201——Windows口令破解

    2017-2018-1 信息安全技术 实验二 20155201--Windows口令破解 一.实验原理 口令破解方法 口令破解主要有两种方法:字典破解和暴力破解. 字典破解是指通过破解者对管理员的了解 ...

  4. 【javascript】浏览器用户代理检测脚本实现

    以下是完整的用户代理字符串检测脚本,包括检测呈现引擎.平台.Windows操作系统.移动设备和游戏系统. var client = function(){ // 呈现引擎 var engine = { ...

  5. [微信开发] - 从最新的appid,appsecret读取配置信息

    设置好form表单,填写参数传入Java后端做为实例bean,接着存储倒数据库. 当微信端接口配置提交时,Java接口从数据库获取最新的配置信息,可以根据increaseID,也可以设置时间段, 这里 ...

  6. 使用SpringBoot发送邮件

    最后发送成功后,感觉SpringBoot真的很强大. http://www.ykmimi.com/email ↑待加入email输入的重载(可以不上传文件或可以不填写主内容) ↑待加入邮箱RegExp ...

  7. css 基础 - 2

    css 基础 - 2 一.文本样式: 文字竖着书写: 语法:writing-mode : lr-tb.tb-rl 参数:lr-tb:从左向右,从上往下 tb-rl:从上往下,从右向左 1.text-a ...

  8. Lua中获取table长度

    -- table.getn(tableName) 得到一个table的大小,等同于操作符# -- 要注意的是:该table的key必须是有序的,索引是从1开始的. --例如有序的 local xian ...

  9. java(Android)跨Module调用对应类方法需求解决方案

    在开发组件化项目中,遇到一个这样的问题,两个不同的Module相互之间没有任何直接依赖关系,现在需求是需要在Module_A中调用Module_B中的某个类的方法,以下为解决此问题的方法: 采用的核心 ...

  10. nodejs使用multiparty模块实现文件上传(另附express.bodyParser()的说明)

    最近师弟师妹们在用formidable做文件上传的时候会出现form.parse()不会触发的问题,在stackoverflow也没有找到答案,反而是几个答案推荐使用multiparty来代替,因为那 ...