首先来看完全二叉树的定义:
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。而将一维数组视为完全二叉树书得到的即为堆。
堆效率极高,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能优化,几乎每次都要考到的二叉排序树的效率也要借助平衡性来提高,而平衡性基于完全二叉树...
分类:
其他好文 时间:
2014-10-13 20:50:17
阅读次数:
150
堆排序没有什么多说的,就是输出的时候最后一个数据后面多一个空格导致输出错误。//#define LOCAL#include#include#includeusing namespace std;typedef long ElemType;const int maxSize=1000000;//从结点...
分类:
其他好文 时间:
2014-10-12 21:15:28
阅读次数:
186
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
编程语言 时间:
2014-10-12 16:32:08
阅读次数:
187
各算法的时间复杂度 平均时间复杂度 插入排序 O(n^2) 冒泡排序 O(n^2) 选择排序 O(n^2) 快速排序 O(n log n) 堆排序 O(n log n) 归并排序 O(n log n) 基数排序 O(n) 希尔排序 O(n^1.25)1 快速排序(QuickSort)快速排序是一个就...
分类:
编程语言 时间:
2014-10-11 21:51:36
阅读次数:
222
堆排序,要从初始状态调整成大顶堆,然后每次取出顶(此时顶是最大的),用最后一个元素代替顶,再接着排序。#define LOCAL#include#include#includeusing namespace std;typedef int ElemType;const int maxSize=10;...
分类:
编程语言 时间:
2014-10-10 17:43:44
阅读次数:
199
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
其他好文 时间:
2014-10-10 12:41:54
阅读次数:
168
堆是一棵完全二叉树,它的每个结点大于或等于它的任意一个孩子。在Java中可以用一个ArrayList存储堆,则对于位于 i 处的结点,它的左孩子在位置2i+1处,它的右孩子在位置2i+2处,而它的父亲在位置(i-1)/2处。1.添加一个新结点:1 Let the last node be the c...
分类:
其他好文 时间:
2014-10-10 11:08:14
阅读次数:
116
HeapSort 原理:(堆排序是不稳定的)实现堆排序可以看成分为两个部分: 1.从一个无序堆建成一个大顶堆(假设我们要求从小到大排序) 2.在“输出”堆顶元素之后,调整剩余元素成为一个新的堆建立大顶堆方法: 从最后一个非叶子结点开始向前遍历,每一个遍历到的结点都和它的两个(或者一个)子结点中的最大...
分类:
编程语言 时间:
2014-10-10 00:01:37
阅读次数:
244
内存可以分为动态内存和静态内存;动态分配是在栈中分配的,静态分配是在堆中分配;“栈”和”堆“的区别在本质上只是操作系统分配内存时,分配的方式不用,从而形成“栈”,”堆“;“堆”是以堆排序的方式分配的内存,“栈”是以压栈、出栈方式分配;定义: 一种可以实现“先进后出”的存储结构;类比于“杯子”;...
分类:
其他好文 时间:
2014-10-09 14:06:33
阅读次数:
199
1.binary heap的实现
BinaryHeap.h
#ifndef BINARYHEAP_H
#define BINARYHEAP_H
class BinaryHeap
{
public:
BinaryHeap(int N);
bool isEmpty();
void exchange(int i,int j);
...
分类:
其他好文 时间:
2014-10-08 16:22:45
阅读次数:
260