思想:

  1. 利用最小堆堆顶为序列最小值,将其与堆尾互换,通过下沉再次得到最小堆,重复

  2. 初始最小(大)堆通过自下向上的判断交换递归得到

  

平均性能

O(N*logN)

其他性能

由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。
堆排序是就地排序,辅助空间为O(1).
它是不稳定的排序方法。(排序的稳定性是指如果在排序的序列中,存在前后相同的两个元素的话,排序前 和排序后他们的相对位置不发生变化)

Python代码

# -*- coding: utf-8 -*-def heap(arr):# 排序节点def node_sort(_arr, _n, _N):if _N < 2*_n:returnelif _N == 2*_n:if _arr[_n] > _arr[2*_n]:_arr[_n], _arr[2*_n] = _arr[2*_n], _arr[_n]else:min_butree =  2*_n+1 if _arr[2*_n] > _arr[2*_n+1] else 2*_nif _arr[_n] > _arr[min_butree]:_arr[_n], _arr[min_butree] = _arr[min_butree], _arr[_n]node_sort(_arr, min_butree, _N)# 初始化得到最大堆N = len(arr) - 1for i in range(len(arr), 0, -1):node_sort(arr, i, N)# 堆顶与堆尾交换,下沉后重复得到从大到小排序for i in range(N-2):arr[1], arr[N-i] = arr[N-i], arr[1]node_sort(arr, 1, N-i-1)arr[1], arr[2] = arr[2], arr[1]from random import randint
arr = [-1] + [randint(0, 100) for i in range(20)]
print arr
heap(arr)
print arr

转载于:https://www.cnblogs.com/xiaosha/p/5191486.html

python排序-堆排序相关推荐

  1. Python最大堆排序实现方法

    Python最大堆排序实现方法,具体代码如下:   # -*- coding: utf-8 -*-   def merge_sort(seq, cmp=cmp, sentinel=None):     ...

  2. python中堆排序_python堆排序,详细过程图和讲解,这样做小白都会

    ### 正文前的扯淡 之前电话面试一个公司时,面试官让写一个堆排序,遗憾的是我忘了堆排序的思想了,所以直接说不会写,这次电面也以失败告终...知耻后勇,这几天在网上找了很多写堆排序的帖子,但是帖子质量 ...

  3. Python排序算法总结

    Python排序算法总结 递归 在正式讲算法之前,先介绍一下递归.递归是一种解决问题的思路. 特点 调用自身 必须有一个明确的结束条件,比如if... 递归的两个阶段: 递推(压栈):到某个阶段,该阶 ...

  4. Python实现堆排序

    Python实现堆排序 一.堆排序简介 堆排序(Heap Sort)是利用堆这种数据结构所设计的一种排序算法. 堆的结构是一棵完全二叉树的结构,并且满足堆积的性质:每个节点(叶节点除外)的值都大于等于 ...

  5. python中堆排序_Python实现堆排序的方法详解

    本文实例讲述了Python实现堆排序的方法.分享给大家供大家参考,具体如下: 堆排序作是基本排序方法的一种,类似于合并排序而不像插入排序,它的运行时间为O(nlogn),像插入排序而不像合并排序,它是 ...

  6. python 排序 sorted 如果第一个条件 相同 则按第二个条件排序

    python 排序 sorted 如果第一个条件 相同 则按第二个条件排序 怎样遍历一个list  符合下列条件 1. 按照元组的第一个从小到大排序 2. 如果第一个相同  则按照元组第2个从大到小 ...

  7. 【Python排序搜索基本算法】之拓扑排序

    [Python排序搜索基本算法]之拓扑排序 版权声明:本文为博主原创文章,未经博主允许不得转载.

  8. Python排序函数用法

    Python排序函数完美体现了Python语言的简洁性,对于List对象,我们可以直接调用sort()函数(这里称为"方法"更合适)来进行排序,而对于其他可迭代对象(如set,di ...

  9. Python 排序 -- sort()、sorted()

    Python 排序 – sort().sorted() 1. 列表排序:sort() 函数原型: 直接对列表本身进行排序,不会返回新的列表 list.sort(cmp=None, key=None, ...

最新文章

  1. 层化(stratification)的方法
  2. 看完JDK并发包源码的这个性能问题,我惊了!
  3. ZH奶酪:Python按行读取文件
  4. 成功解决local variable 'str' referenced before assignment
  5. 利用Quartus设计4位同步二进制加法计数器
  6. idea查看过期时间
  7. Android中View绘制流程
  8. php获取本机root,通过PHP执行root命令
  9. 网络自己发 sip invite_IP话机网页配置SIP账号
  10. 后置“浴霸”六摄!疑似索尼全新旗舰Xperia 2曝光
  11. webservice实例java_Java WebService(实战) 简单实例
  12. jquery显示隐藏切换_jQuery显示,隐藏,切换
  13. [设计原则] 为模块设计初始化和终止化函数
  14. Fireworks免费下载
  15. 计算机专业考研电路原理,2016年南开大学综合基础课(模拟电路、数字电路、计算机原理)考研试题.pdf...
  16. 艾司博讯:拼多多访客多但是成交率低
  17. YOLO算法的原理与实现
  18. python操作腾讯文档_Python调用腾讯云接口
  19. [Leetcode] 717. 1比特与2比特字符
  20. 声明式导航与编程式导航

热门文章

  1. python高阶_Python高阶学习
  2. mysql数据库加载太慢_使用MySQL数据库很慢
  3. 个人笔记 vue npm redis
  4. 共享未授予用户在此计算机上设置家庭组,Win10系统关闭了家庭组如何共享文件?...
  5. antd中tooltip换行_ant design 中实现表格头部可删除和添加
  6. mac java myeclipse_Myeclipse mac版-Myeclipse 2015 Mac版下载 V2015免费版-PC6苹果网
  7. windows编程 识别拖动_Quicker 解锁新姿势!Windows 还能这么用?
  8. 统计一行文本的单词个数_LeetCode68-文本左右对齐
  9. 疯狂的html css,疯狂Html+CSS+JS 中JS总结
  10. matlab dotchart,MATLAB中如何用对数方式显示图形坐标?