C++实现堆,以及堆排序

本文介绍了堆的性质和完全二叉树的特点,详细讲解了如何使用C++实现堆,包括堆的存储结构、堆的概念和特性。重点讨论了堆的push和pop操作,以及向上调整和向下调整算法。堆排序作为堆的重要应用,其时间复杂度为O(N*LogN),文章分析了堆排序的两种调整思路,并解释了为何升序排序建大根堆的效率优势。
摘要由CSDN通过智能技术生成

有关二叉树的性质:
1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有 个结点.

2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 .

3. 对任何一棵二叉树, 如果度为0其叶结点个数为 , 度为2的分支结点个数为 ,则有 = +1

4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h= . (ps: 是log以2 为底,n+1为对数)

5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对 于序号为i的结点有:

        1. 若i>0,i位置节点的双亲序号:(i-1)/2;i=0,i为根节点编号,无双亲节点

        2. 若2i+1<n,左孩子序号:2i+1 若2i+1>=n则无左孩子

        3. 若2i+2<n,右孩子序号:2i+2 若2i+2>=n则无右孩子 

有关堆

存储结构:

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。

普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。现实中我们通常把堆(一种完全二叉树)使用顺序结构的数组来存储

堆的概念和结构:

堆的性质:

        堆中某个节点的值总是不大于或不小于其父节点的值;

        堆总是一棵完全二叉树。  

上面这些都是复制粘贴的, 想看了随便看看。下面给出自己的一些总结:

C++实现堆:

Heap.h 

#pragma once
#include<iostream>
#include<assert.h>
#include<algorithm>
#include<Windows.h>
using namespace std;
typedef int DataType;

class Heap
{
public:
	Heap() :a(new DataType[1]), size(0), capacit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值