python排序-堆排序
思想:
1. 利用最小堆堆顶为序列最小值,将其与堆尾互换,通过下沉再次得到最小堆,重复
2. 初始最小(大)堆通过自下向上的判断交换递归得到
平均性能
其他性能
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排序-堆排序相关推荐
- Python最大堆排序实现方法
Python最大堆排序实现方法,具体代码如下: # -*- coding: utf-8 -*- def merge_sort(seq, cmp=cmp, sentinel=None): ...
- python中堆排序_python堆排序,详细过程图和讲解,这样做小白都会
### 正文前的扯淡 之前电话面试一个公司时,面试官让写一个堆排序,遗憾的是我忘了堆排序的思想了,所以直接说不会写,这次电面也以失败告终...知耻后勇,这几天在网上找了很多写堆排序的帖子,但是帖子质量 ...
- Python排序算法总结
Python排序算法总结 递归 在正式讲算法之前,先介绍一下递归.递归是一种解决问题的思路. 特点 调用自身 必须有一个明确的结束条件,比如if... 递归的两个阶段: 递推(压栈):到某个阶段,该阶 ...
- Python实现堆排序
Python实现堆排序 一.堆排序简介 堆排序(Heap Sort)是利用堆这种数据结构所设计的一种排序算法. 堆的结构是一棵完全二叉树的结构,并且满足堆积的性质:每个节点(叶节点除外)的值都大于等于 ...
- python中堆排序_Python实现堆排序的方法详解
本文实例讲述了Python实现堆排序的方法.分享给大家供大家参考,具体如下: 堆排序作是基本排序方法的一种,类似于合并排序而不像插入排序,它的运行时间为O(nlogn),像插入排序而不像合并排序,它是 ...
- python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
python 排序 sorted 如果第一个条件 相同 则按第二个条件排序 怎样遍历一个list 符合下列条件 1. 按照元组的第一个从小到大排序 2. 如果第一个相同 则按照元组第2个从大到小 ...
- 【Python排序搜索基本算法】之拓扑排序
[Python排序搜索基本算法]之拓扑排序 版权声明:本文为博主原创文章,未经博主允许不得转载.
- Python排序函数用法
Python排序函数完美体现了Python语言的简洁性,对于List对象,我们可以直接调用sort()函数(这里称为"方法"更合适)来进行排序,而对于其他可迭代对象(如set,di ...
- Python 排序 -- sort()、sorted()
Python 排序 – sort().sorted() 1. 列表排序:sort() 函数原型: 直接对列表本身进行排序,不会返回新的列表 list.sort(cmp=None, key=None, ...
最新文章
- 层化(stratification)的方法
- 看完JDK并发包源码的这个性能问题,我惊了!
- ZH奶酪:Python按行读取文件
- 成功解决local variable 'str' referenced before assignment
- 利用Quartus设计4位同步二进制加法计数器
- idea查看过期时间
- Android中View绘制流程
- php获取本机root,通过PHP执行root命令
- 网络自己发 sip invite_IP话机网页配置SIP账号
- 后置“浴霸”六摄!疑似索尼全新旗舰Xperia 2曝光
- webservice实例java_Java WebService(实战) 简单实例
- jquery显示隐藏切换_jQuery显示,隐藏,切换
- [设计原则] 为模块设计初始化和终止化函数
- Fireworks免费下载
- 计算机专业考研电路原理,2016年南开大学综合基础课(模拟电路、数字电路、计算机原理)考研试题.pdf...
- 艾司博讯:拼多多访客多但是成交率低
- YOLO算法的原理与实现
- python操作腾讯文档_Python调用腾讯云接口
- [Leetcode] 717. 1比特与2比特字符
- 声明式导航与编程式导航
热门文章
- python高阶_Python高阶学习
- mysql数据库加载太慢_使用MySQL数据库很慢
- 个人笔记 vue npm redis
- 共享未授予用户在此计算机上设置家庭组,Win10系统关闭了家庭组如何共享文件?...
- antd中tooltip换行_ant design 中实现表格头部可删除和添加
- mac java myeclipse_Myeclipse mac版-Myeclipse 2015 Mac版下载 V2015免费版-PC6苹果网
- windows编程 识别拖动_Quicker 解锁新姿势!Windows 还能这么用?
- 统计一行文本的单词个数_LeetCode68-文本左右对齐
- 疯狂的html css,疯狂Html+CSS+JS 中JS总结
- matlab dotchart,MATLAB中如何用对数方式显示图形坐标?