heapq模块实现了python中的堆排序,并提供了有关方法。让用Python实现排序算法有了简单快捷的方式。
heapq的官方文档和源码:8.4.heapq-Heap queue algorithm
下面通过举例的方式说明heapq的应用方法
实现堆排序
#! /usr/bin/evn python
#coding:utf-8
from heapq import *
def ...
                            
                            
                                分类:
编程语言   时间:
2014-06-24 18:47:47   
                                阅读次数:
403
                             
                         
                    
                        
                            
                            
                                假设要实现非递减排序,则需要用要大顶堆。此处设计到三个大顶堆的操作:(1)自顶向下调整操作:MaxHeapify(对应堆的SiftDown操作)、(2)利用数组建立大顶堆:BuildMaxHeap、(3)不断交换堆顶元素(堆的最大元素)和堆的末尾元素,实现非递减排序。
优先队列分为最大优先队列和最小优先队列,分别借助于大顶堆和小顶堆。
优先队列有以下基本操作:(1)提取队列中的最大(小)元素;(2)提取队列中的最大(小)元素并从队列中删除;(3)将队列中元素为x的关键字减少(增大)到k,这里假设k的值不大(...
                            
                            
                                分类:
其他好文   时间:
2014-06-22 20:58:26   
                                阅读次数:
319
                             
                         
                    
                        
                            
                            
                                (二叉)堆是一个数组,是一颗近似完全二叉树,分为大顶堆&小顶堆。表示堆的数组A有两个属性:(1)A.length表示数组元素的个数;(2)A.heap-size表示有多少个堆元素存储在数组A中。更多的关于堆的性质的介绍:算法导论第三版:p85-p89、编程珠玑:p141-p145。
堆的操作主要包括堆插入、堆删除两个,而堆插入设计到FixUp操作(自底向上调整),堆删除涉及到FixDown操作(自顶向下调整,大顶堆时对应算法导论上的MAX-HEAPIFY操作)。
本文主要给出的是大顶堆和小顶堆的基本操作的C...
                            
                            
                                分类:
其他好文   时间:
2014-06-22 13:58:41   
                                阅读次数:
158
                             
                         
                    
                        
                            
                            
                                前面写了js的排序实现,总得玩玩java的哈。同样,冒泡、选择、快速(这三个之前实现过也写过文章)、堆排序,然后做比较。主要遇到的难点:- -||想轻松点写个封装计时的逻辑,不想每调用一个排序就要写一个计时代码。想想,还是javascript写起来方便;java的话,我想到的方法是写一个抽象类:抽象...
                            
                            
                                分类:
编程语言   时间:
2014-06-22 12:28:04   
                                阅读次数:
218
                             
                         
                    
                        
                            
                            
                                本文章用七种思路来查找无序数组中的前k个最小(最大)元素,复杂度随着问题的分析变得越来越低,思路也随着分析变得越来越的。贯穿讲解了快速排序和堆排序的应用,对这两种的排序在阅读本文后会有更深刻的理解。...
                            
                            
                                分类:
其他好文   时间:
2014-06-22 00:06:29   
                                阅读次数:
347
                             
                         
                    
                        
                            
                            
                                堆排序、利用堆实现最大(小)优先级队列、STL中的heap的使用,利用堆求解top_k类问题。...
                            
                            
                                分类:
其他好文   时间:
2014-06-21 22:12:31   
                                阅读次数:
291
                             
                         
                    
                        
                            
                            
                                堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。 有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。 符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这样的完全二叉树称为...
                            
                            
                                分类:
其他好文   时间:
2014-06-20 19:57:49   
                                阅读次数:
215
                             
                         
                    
                        
                            
                            
                                使用比较短的篇幅、详细的分析、伪代码、代码和动画详细介绍了快速排序和堆排序,并分析了算法思想和复杂度。值得一看...
                            
                            
                                分类:
其他好文   时间:
2014-06-18 06:48:51   
                                阅读次数:
210
                             
                         
                    
                        
                            
                            
                                归并排序(merging sort): 包含2-路归并排序, 把数组拆分成两段, 使用递归, 将两个有序表合成一个新的有序表.归并排序(merge sort)的时间复杂度是O(nlogn), 实际效果不如快速排序(quick sort)和堆排序(heap sort),但是归并排序是稳定排序, 而.....
                            
                            
                                分类:
其他好文   时间:
2014-06-17 23:47:38   
                                阅读次数:
299