算法导论程序10--建堆(Python)
来源:互联网 发布:网络电信诈骗防 编辑:程序博客网 时间:2024/06/07 01:17
我们可以用自底向上的方法利用过程max-heapify把一个大小为n=A.length的数组A[0..n-1]转换为最大堆。子数组A(下取整n/2.....n-1)中的元素都是叶结点。每个叶结点都可以看成只包含一个元素的堆。过程build_max_heap(A)对树中的其他结点都调用一次max-heapify:
代码:
import mathclass heapsort: def __init__(self,a_A): self.list=a_A self.heap_size = len(a_A) def parent(self,i): return math.floor((i-1)/2) def left(self,i): return 2*i+1 def right(self,i): return 2*i+2 def max_heapify(self,A,i): largest = i key = A[i] l = self.left(i) r = self.right(i) if l<len(A) and A[l] > A[largest]: largest = 2*i+1 if r<len(A) and A[r] > A[largest]: largest = 2*i+2 A[i]=A[largest] A[largest]=key if largest != i: self.max_heapify(A,largest) return A def build_max_heap(self,A): N = math.floor(len(A)/2)-1 for i in range(N,-1,-1): A = self.max_heapify(A,i) return A运行:
>>> A=[12,3,45,66,7,8,9,11,13]>>> h=heapsort(A)
>>> A=h.build_max_heap(A)>>> A[66, 13, 45, 12, 7, 8, 9, 11, 3]
0 0
- 算法导论程序10--建堆(Python)
- 算法导论程序8--堆(Python)
- 算法导论程序11--堆排序算法(Python)
- 算法导论程序16--基数排序(Python)
- 算法导论程序21--链表(Python)
- 算法导论堆排序python实现
- 算法导论—堆排序(python)
- 堆排序(算法导论)
- 堆排序(算法导论)
- 堆排序(最小堆)--【算法导论】
- 算法导论--堆排序(堆维护,建堆,堆排序)
- 算法导论程序6--随机算法(Python)
- 算法导论程序1--插入排序(Python+Java)
- 算法导论程序2--归并排序(Python)
- 算法导论程序3--最大子数组问题(Python)
- 算法导论程序5--雇佣问题(Python)
- 算法导论程序7--在线雇佣问题(Python)
- 算法导论程序12--优先队列(Python)
- Android View
- python数据输入caffe实现回归
- C:数组实现十进制转换二进制
- JSON JSONArray 创建JSON 和 解析JSON
- 很好的sql去重
- 算法导论程序10--建堆(Python)
- laravel 5.1 查询底层原理 (Query Builder) 源码解析(上)
- Netty学习之二--Java socket编程(UDP实例)
- Swiper的API及自定义分页器等问题-淘宝触屏版首页制作
- Maven开发笔记(一)—— Maven中的依赖作用范围(scope)
- 训练自己的分类数据(only cpu)
- 阿里云搭建基于MatlabMPI的集群(二):Ubuntu16.04基于VNC的图形界面安装
- 射频/微波/毫米波/太赫兹闲说
- centos7安装python-pip