数据结构-堆

堆和优先队列:

优先队列是一种抽象的数据类型,而堆是一种数据结构,所以堆并不是优先队列,堆是实现优先队列的一种方式。
实现 优先队列 的方式有很多种,比如数组和链表。但是,这些实现方式只能保证插入操作和删除操作中的一种操作可以在 O(1)O(1) 的时间复杂度内完成,而另外一个操作则需要在 O(N)O(N) 的时间复杂度内完成。而 堆 能够使 优先队列 的插入操作在 O(log N)O(logN) 的时间复杂度内完成,删除操作在 O(log N)O(logN) 的时间复杂度内完成。

堆是一种特别的二叉树,满足以下条件:

1、完全二叉树(从左到右依次放入节点);
2、每一个节点的值都必须大于等于或者小于等于其孩子节点的值。

堆的特点:

1、可以在O(logN)的时间复杂度内向堆中插入元素;
2、可以在O(logN)的时间复杂度内从堆中删除元素;
3、可以在O(1)的时间复杂度内获取堆中最大值或最小值。

堆的分类:

最大堆:堆中每一个节点的值都大于等于其孩子节点的值。最大堆的堆顶元素(根结点)是堆中的最大值。
最小堆:堆中每一个节点的值都小于等于其孩子节点的值。最小堆的堆顶元素(根结点)是堆中的最小值。
当前节点编号i,左孩子的编号2i,右孩子的编号2i+1。
在这里插入图片描述

时间复杂度和空间复杂度

在这里插入图片描述

堆排序

理论:堆排序指的是利用堆的数据结构对一组无序元素进行排序。

最小堆 排序算法步骤如下:

将所有元素堆化成一个 最小堆 ;
取出并删除堆顶元素,并将该堆顶元素放置在存储有序元素的数据集 T 中;
此时,堆 会调整成新的 最小堆;
重复 3 和 4 步骤,直到 堆 中没有元素;
此时得到一个新的数据集 T,其中的元素按照 从小到大 的顺序排列。

最大堆排序算法步骤如下:

将所有元素堆化成一个 最大堆;
取出并删除堆顶元素,并将该堆顶元素放置在存储有序元素的数据集 T 中;
此时,堆 会调整成新的 最大堆;
重复 3 和 4 步骤,直到 堆 中没有元素;
此时得到一个新的数据集 T,其中的元素按照从大到小的顺序排列。
时间复杂度:O(Nlog N)。N是堆中的元素个数。

空间复杂度:O(N)。N是堆中的元素个数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值