堆排序,是利用堆结构进行排序,一般是利用最大堆,即根节点比左右两个子树的节点都大,具体算法步骤如下。
一、创建堆
        首先将数组中的元素调整成堆,对应下面程序中的createHeap(List list)方法。创建堆就是从树中最后一个内节点(下标为(n-1)/2)开始调整数组中元素的位置,使以这个内节点为根的子树满足堆的结构。即依次将以(n-1)/2、(n-1)/2-1、(n-1)...
                            
                            
                                分类:
编程语言   时间:
2015-04-09 17:38:23   
                                阅读次数:
332
                             
                         
                    
                        
                            
                            
                                #include
#include
using namespace std;
template
class MinHeap
{
public:
	MinHeap(int sz=DefaultSize)
	{
		capacity = sz>DefaultSize?sz:DefaultSize;
		heap = new Type[capacity];
		size = 0;
	}
	MinHea...
                            
                            
                                分类:
编程语言   时间:
2015-04-08 18:05:40   
                                阅读次数:
149
                             
                         
                    
                        
                            
                            
                                1. 堆的概念堆的数据结构是一种数组对象;堆可以视作为一颗完全二叉树(其中,树的每一层都填满,最后一层可能除外);树中每个节点与数组中存放该节点值的元素对应;堆可以划分为两类:a) 最大堆:除了根节点,有A[parent(i)] >= A[i],最大元素即根节点;b) 最小堆:除了根节点,有A[pa...
                            
                            
                                分类:
编程语言   时间:
2015-04-08 12:22:57   
                                阅读次数:
120
                             
                         
                    
                        
                            
                            
                                优先队列和堆排序标签(空格分隔): 排序算法 数据结构优先队列和堆排序
优先队列
堆
1 基于堆的算法
初始化
自底向上堆化
自顶向下堆化
插入删除一项
2 堆排序
优先队列全部代码
1 优先队列普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (largest-in,first-...
                            
                            
                                分类:
编程语言   时间:
2015-04-08 10:59:15   
                                阅读次数:
214
                             
                         
                    
                        
                            
                            
                                设计模式的一句话 :过分设计是一种罪过,要根据项目实事求是,没有任何一种设计是一步到位,很多功能都是根据反馈进行改善。1、背景:在实际开发中,我们常常遇见实现某种业务功能时,有许多不同实现方式,使用者可以任意选择其中的一种方式。 
例如,在排序某个序列数据时,我们可以选择冒泡排序、快速排序、插入排序、堆排序等等。我们在开发过程中,通常会选择 
将不同的算法以硬编码的方式封装到一个类当中,当我们需要添...
                            
                            
                                分类:
其他好文   时间:
2015-04-07 12:02:47   
                                阅读次数:
158
                             
                         
                    
                        
                            
                            
                                本段代码实现了建堆,维护最大堆的性质,堆排序函数,优先队列的相关函数(插入,找最大值,提取出最大值,增加关键值,增加元素),以及相关的测试 1 #include 2 #include 3 #include 4 #define LEFT(i) (2 * i) 5 #define RIG...
                            
                            
                                分类:
编程语言   时间:
2015-04-06 23:02:56   
                                阅读次数:
193
                             
                         
                    
                        
                            
                            
                                1.堆排序a.堆的定义n个元素序列{k1,k2,...,kn}当且仅当满足以下关系时,称之为堆。ki=k2i且ki>=k2i+1 (大根堆)以下针对最大堆b.维护堆的性质Max-Heapify通过让A[i]的值在最大堆中"逐级下降"(A[i]的值小于其左右孩子的值时),从而使得以i为根结点的子树重新...
                            
                            
                                分类:
编程语言   时间:
2015-04-06 15:34:34   
                                阅读次数:
218
                             
                         
                    
                        
                            
                            
                                堆排序算法
先看第一个函数HeapAdjust,这个函数功能是在已经是构成堆的二叉树上,如果节点k数据变化了,对节点k进行修正,使之成为一个新的堆二叉树,n为数据长度。
def HeapAdjust(lst,k,n):
    while(2*k+1<n):
        j=2*k+1
        if j+1lst[j+1]:
            j=j+1
        if...
                            
                            
                                分类:
编程语言   时间:
2015-04-06 09:01:20   
                                阅读次数:
242
                             
                         
                    
                        
                            
                            
                                堆堆排序和合并排序一样,是一种时间复杂度为O(nlgn)的算法,同时和插入排序一样,是一种就地排序算法(不需要额外的存储空间)。堆排序需要用到一种被称为最大堆的数据结构,与java或者lisp的gc不一样,这里的堆是一种数据结构,他可以被视为一种完全二叉树,即树里面除了最后一层其他层都是填满的。也正...
                            
                            
                                分类:
编程语言   时间:
2015-04-05 23:20:28   
                                阅读次数:
237
                             
                         
                    
                        
                            
                            
                                #include "stdafx.h"void temp(int *l,int i,int j){ l[i]=l[i]^l[j]; l[j]=l[i]^l[j]; l[i]=l[i]^l[j];}//使用异或有个问题,当i和j相等时,不能实现交换的目的void HeapSort_M...
                            
                            
                                分类:
编程语言   时间:
2015-04-05 23:08:11   
                                阅读次数:
205