Python笔记:二叉堆及堆排序
来源:互联网 发布:微信数据保存到sd卡 编辑:程序博客网 时间:2024/05/04 11:41
# binary heapfrom math import logclass BinaryHeap(object): def __init__(self): self.data = [0] self.size = 0 def percUp(self, c): while c//2 > 0: if self.data[c] < self.data[c//2]: tmp = self.data[c] self.data[c] = self.data[c//2] self.data[c//2] = tmp c //= 2 def insert(self, v): self.data.append(v) self.size += 1 self.percUp(self.size) def minChild(self, p): if p * 2 + 1 > self.size: return p * 2 else: if self.data[p*2] > self.data[p*2+1]: return p * 2 + 1 else: return p * 2 def percDown(self, p): while p * 2 <= self.size: mc = self.minChild(p) if self.data[p] > self.data[mc]: tmp = self.data[p] self.data[p] = self.data[mc] self.data[mc] = tmp p = mc def buildHeap(self, nlist): self.data += nlist self.size += len(nlist) n = self.size // 2 while n > 0: self.percDown(n) n -= 1 def delMin(self): if self.size == 0: return None retval = self.data[1] self.data[1] = self.data[self.size] self.size -= 1 self.data.pop() self.percDown(1) return retval def sort(self): retval = [] data = self.data[:] size = self.size rv = self.delMin() while rv != None: retval.append(rv) rv = self.delMin() self.data = data self.size = size return retval def printHeap(self): dt = [] for i in range(1, len(self.data)): dt.append(self.data[i]) if log(i+1, 2) % 1 == 0: print dt dt = [] print dt参考《Problem Solving with Algorithms and Data Structures》中二叉堆的Python实现方法,利用删除最小项完成堆排序。
0 0
- Python笔记:二叉堆及堆排序
- c++实现二叉堆及堆排序
- 二叉树及堆排序
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆排序及python实现
- 堆及堆排序
- 堆及堆排序
- 堆及堆排序
- heapSort - 堆排序 / 二叉堆
- heapSort - 堆排序 / 二叉堆
- 二叉堆(堆排序)
- 二叉堆与堆排序
- (二叉堆,堆排序)
- 数据结构 二叉堆 & 堆排序
- 二叉堆与堆排序
- zoj 1642 - Match for Bonus
- Android自动关机代码
- android UI组件
- boost::shared_ptr 分析与实现
- ubuntu下添加自动执行程序的方法
- Python笔记:二叉堆及堆排序
- Javascript 中的addLoadEvent详解
- hdu 5047 Sawtooth
- 学习《Binarized Normed Gradients for Objectness Estimation at 300fps》
- zoj 1986 - Bridging Signals
- Java 中的写入
- session和cookie
- Android中启动其他Activity并返回结果
- Hackerrank Angry Children