基本思想:
基本思想主要就是两点:构建初始化堆和排序。
以构建最大堆为例,可以分为以下几个步骤:
1、将初始待排序序列(R0,R1,R2....Rn-1)构建成最大堆,此堆为初始的无序堆。
2、将堆顶元素R0与最后一个元素Rn-1交换,此时得到一个新的无序序列(R0,R1,R2....Rn-2)和新的有序序列Rn-1,且满足R[0,2...n-2]
3、由于交换后新的堆顶R0可能违反最大...
分类:
编程语言 时间:
2015-05-05 19:50:19
阅读次数:
171
关于堆排序的一些基本定义可参见我转载的另一篇博文。http://blog.csdn.net/u010275850/article/details/45311661
其实在学习堆的时候细心的同学就可以发现,只要依次保存删除操作的数据,就可以得到一个有序的序列。堆排序也是利用了这样的思想。
算法实现:
/*根据最大堆实现的堆排序*/
#include
#define LeftChild(i)...
分类:
编程语言 时间:
2015-04-29 11:43:14
阅读次数:
136
Redis无法启动
今天在启动Redis时提示以下错:
C:\Java\redis2817>redis-server.exe redis.windows.conf
[5268] 23 Apr 11:45:22.696 #
The Windows version of Redis allocates a large memory mapped file for sharing
the hea...
分类:
其他好文 时间:
2015-04-23 13:14:43
阅读次数:
178
堆排序,顾名思义利用堆的性质进行排序。堆都有哪些性质,比如:一堆沙子、一堆泥土二叉堆实际上是一课完全二叉树,同时满足:父结点的键值总是大于或等于(小于或等于)任何一个子结点的键值当父结点的键值总是大于或等于任何一个子结点的键值时称为 最大堆当父结点的键值总是小于或等于任何一个子结点的键值时称为 最小...
分类:
编程语言 时间:
2015-04-18 17:37:59
阅读次数:
145
参考书籍《数据结构与算法分析——C语言描述》
关于堆的一些基本概念,可参见小zz的另一篇博文。
/*本例程实现的是最小堆,最大堆类似*/
#include
#include
#include
#include
#define MAX 13
typedef struct BHeap
{
int Capacity;//堆的最大容量
int Size;//当前堆大小
in...
分类:
其他好文 时间:
2015-04-15 23:27:29
阅读次数:
235
这题思路也很简单,就是用一个最大堆堆去维护Prim算法中的Low数组,把刷新Low数组的操作,变成了刷新堆的操作,由于堆的插入操作位logn,查询时间为常数,因此在边稀疏的情况下,其复杂度与Kruscal接近。这题刚开始老是WA,想了很久,不知道错在哪里,后来发现时因此不能直接去堆中的最小路径,因为...
分类:
编程语言 时间:
2015-04-13 00:10:33
阅读次数:
190
堆排序,是利用堆结构进行排序,一般是利用最大堆,即根节点比左右两个子树的节点都大,具体算法步骤如下。
一、创建堆
首先将数组中的元素调整成堆,对应下面程序中的createHeap(List list)方法。创建堆就是从树中最后一个内节点(下标为(n-1)/2)开始调整数组中元素的位置,使以这个内节点为根的子树满足堆的结构。即依次将以(n-1)/2、(n-1)/2-1、(n-1)...
分类:
编程语言 时间:
2015-04-09 17:38:23
阅读次数:
332
1. 堆的概念堆的数据结构是一种数组对象;堆可以视作为一颗完全二叉树(其中,树的每一层都填满,最后一层可能除外);树中每个节点与数组中存放该节点值的元素对应;堆可以划分为两类:a) 最大堆:除了根节点,有A[parent(i)] >= A[i],最大元素即根节点;b) 最小堆:除了根节点,有A[pa...
分类:
编程语言 时间:
2015-04-08 12:22:57
阅读次数:
120
本段代码实现了建堆,维护最大堆的性质,堆排序函数,优先队列的相关函数(插入,找最大值,提取出最大值,增加关键值,增加元素),以及相关的测试 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