筛选法建立初始堆_面试必知必会|理解堆和堆排序

本文详细介绍了堆数据结构的定义、数组表示,以及堆的调整函数siftup和siftdn。通过实例解析了如何使用这两种函数建立初始堆,并探讨了堆排序的实现,特别是如何利用小根堆找到最大的TopN元素。同时,提供了堆排序在LeetCode第215题的应用,强调掌握siftup和siftdn是理解堆的关键。
摘要由CSDN通过智能技术生成

39bec6717eb5330a24543e40ca46e750.png
本文首发于:面试必知必会|理解堆和堆排序 微信公众号:后端技术指南针
持续输出干货 欢迎关注 惊喜直达!

本文将阐述堆和堆排序的基本原理,通过本文将了解到以下内容:

  • 堆数据结构的定义
  • 堆的数组表示
  • 堆的调整函数
  • 堆排序实践

1.堆的简介

堆是计算机科学中的一种特别的树状数据结构。
若是满足以下特性,即可称为堆:给定堆中任意节点P和C,若P是C的母节点,那么P的值会小于等于C的值。若母节点的值恒小于等于子节点的值,此堆称为最小堆;反之称为最大堆。
堆始于J. W. J. Williams在1964年发表的堆排序,当时他提出了二叉堆树作为此算法的数据结构,堆在戴克斯特拉算法和带优先级队列中亦为重要的关键。
维基百科-堆

数据结构中的堆区别于内存分配的堆,我们说的用于排序的堆是一种表示元素集合的结构,堆是一种二叉树。

堆有两个决定性特性:元素顺序和树的形状

  • 元素顺序
    在堆中任何结点与其子结点的大小都遵守数值大小关系。
    A. 如果结点大于等于其所有子结点,也就是堆的根是所有元素中最大的,这种堆称为大根堆(大顶堆、最大堆);
    B. 如果结点小于等于其所有子结点,也就是堆的根是所有元素中最小的,这种堆称为小根堆(小顶堆、最小堆);
    C. 大根堆/小根堆只是约定了父结点和子结点的大小关系,但是并不约束子结点的相对大小和顺序;
    如图为小根堆结构:

518b6ab6cb5c6267653c0723797aea9a.png
  • 树的形状

堆这种二叉树最多在两层具有叶子结点,并且最底层的叶子结点靠左分布,该树种不存在空闲位置,也就是堆是个完全二叉树。上述的两种性质可以保证快捷找到最值,并且在插入和删除新元素时可以实现重新组织再次满足堆的性质。

2.堆的数组表示

堆中没有空闲位置并且数组是连续的,但是数组的下标是从0开始,为了统一,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值