1.堆:类似二叉树
数组对象
2.种类: 最大堆->A[PARENT(i)] >= A[i]
最小堆->A[PARENT(i)]
3.建堆:Heap_max_Build
保持堆性质:Heap_max_Ify
堆排序:Heap_max_Sort
4.Code
#include
#include
#define PAR...
分类:
编程语言 时间:
2015-01-21 09:01:25
阅读次数:
143
1,堆排序概念点击打开链接点击打开链接堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2。它的左右子结点下标分别为2 * i + 1和2 * i + 2。如第0个结点左右子结点下标分别为1和2堆的插入与...
分类:
编程语言 时间:
2015-01-20 22:04:05
阅读次数:
170
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
分类:
编程语言 时间:
2015-01-18 22:29:37
阅读次数:
220
花了点时间一次性实现9个基本排序算法,
其中包括:
【冒泡排序】,【直接选择排序】,【直接插入排序】,
【希尔排序】,【折半插入排序】,【快速排序】,
【堆排序】,【锦标赛排序】,【归并排序】。
储存方式是用数组,元素可以是支持重载运算符的自定义类型,
有在数组中直接复制的,也有在中间过程中用索引记录的,
但最终都结果都保存在原数组中,废话不多说了,直接上代码!...
分类:
编程语言 时间:
2015-01-17 19:31:03
阅读次数:
226
原文:算法系列15天速成——第二天 七大经典排序【中】首先感谢朋友们对第一篇文章的鼎力支持,感动中....... 今天说的是选择排序,包括“直接选择排序”和“堆排序”。 话说上次“冒泡排序”被快排虐了,而且“快排”赢得了内库的重用,众兄弟自然眼红,非要找快排一比高下。
这不今天就来了两兄弟找快排算账...
分类:
编程语言 时间:
2015-01-16 09:59:33
阅读次数:
158
原文:算法系列15天速成——第一天 七大经典排序【上】今天是开篇,得要吹一下算法,算法就好比程序开发中的利剑,所到之处,刀起头落。 针对现实中的排序问题,算法有七把利剑可以助你马道成功。 首先排序分为四种: 交换排序: 包括冒泡排序,快速排序。 选择排序: 包括直接选择排序,堆排序。 插入排序: 包...
分类:
编程语言 时间:
2015-01-16 09:53:39
阅读次数:
185
6.4-5 在所有元素都不同的情况下,HEAPSORT的时间复杂度是Ω(nlgn)
证明:要证明这一点其实不难,只需直觉上理解——虽然堆序不“完整”,但也能在一定程度上确定大小关系,比如较小的元素多半高度很低(接近底层)。
首先进行一个粗略的计算(元素都不同):
堆中高度为0(即最底层)的节点数为总数的一半 n/2。那这些元素在整个元素集中大小位置是如何的呢:
先把这 n/2 个节点排好序...
分类:
编程语言 时间:
2015-01-15 16:14:27
阅读次数:
270
堆:是一种完全二叉树的数据结构,并且具有每个非叶子节点(索引i,从0开始的话)的值大于其左右子节点(2*i+1)的值(大根堆),或者小于其左右子节点(2*i+2)的值(小根堆)。堆的性质决定了其根节点的值必然整个堆中的最大值或者最小值,因此使用堆的这个特性,发明了堆排序。堆排序的大致原理: 1. ....
分类:
编程语言 时间:
2015-01-15 15:47:15
阅读次数:
212
#include
void AdjustHeap(int A[], int i, int n) {
int j, tmp, tmpid;
for( ; i * 2 + 1 = n) {
tmp = A[i * 2 + 1];
tmpid = i * 2 + 1;
...
分类:
编程语言 时间:
2015-01-14 17:57:49
阅读次数:
171
完全二叉树 首先让我们回顾一下完全二叉树的两个性质: 性质1:具有n个结点的完全二叉树的深度为[logn](向下取整)+1。 性质2:若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点: (1) 若 i=1,则该结点是二叉树的根,无双亲,否则,编号为 [i/2](向下取整)的结点为其双亲结点; (2) 若 2i>n,...
分类:
编程语言 时间:
2015-01-13 21:40:06
阅读次数:
221