备战蓝桥杯Day19 - 堆排序基础知识

2024-02-29 02:28

本文主要是介绍备战蓝桥杯Day19 - 堆排序基础知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、每日一题 - 填充

详细题解

s = input()  # 输入字符串
n = len(s)  # 定义字符的长度
judge = ["00", "11", "0?", "1?", "?0", "?1", "??"]
# 把所有的情况一一列举出来
count = 0  # 设置计数器
i = 1  # 设置循环条件索引值
while i < n:if s[i-1:i+1] in judge:  # 在循环中将字符串遍历进行判断count += 1  # 如果符合计数器 + 1i += 2  # 并将索引值向后移动2个else:i += 1 # 不符合条件索引值向后移1个print(count)  # 最后打印出结果

 我觉得最难的在于不纠结?到底是0还是1,而是直接把他看成数字去跟已知情况进行判断。我一直在纠结?到底应该什么时候是1,什么时候是0,把自己的思路的限制住了。

二、堆排序

预备基础知识 - 树

 一些基本知识:

根节点:每棵树最上面的单独的一个节点,如上图A为根节点。

叶子节点:每棵树中最末梢的,不再有分支的节点。如上图B,C,H,I,P,Q,K,L,M,N为叶子节点。

树的深度(高度):层数是几,深度(高度)是几。如上图树的深度(高度)是4,因为有4层。

节点的度:某个分叉的节点分了几个叉,节点的度就是几。如上图E的度为2,F的度为3.

树的度: 节点的度中最大的数,就是树的度。如上图节点的度最大为A分了6个叉,所以树的度为6

孩子节点/父节点:挂在某个节点下面,称为这个节点的孩子节点,某个节点称为父节点。如上图中E是父节点,I,J是孩子节点。

子树:在树中单独拎出来一些节点还能组成树的,称为这棵树的子树。如上图中E,F,G单独拎出来后还是一棵树,故能称为是A这棵树的子树。

这些都是按照我理解的概念写出来的,可能不完善也不是很清楚,最好还是参考课本上的定义概念。

二叉树

 满二叉树、完全二叉树

 

完全二叉树:最下一层可以不满,但节点序号必须按照从左到右排序的方式进行排列

 二叉树的存储方式

 因为堆排序要用到二叉树的存储方式,所以要了解一下

 在堆排序中我们使用顺序存储方式,那么就是把数字放到列表中,在下图中找到父节点与左孩子和右孩子节点之间的数字关系,以方便我们去寻找数据。

 堆排序 - 什么是堆

 

 堆的向下调整

节点的左右子树都是堆,但自身不是堆,可以通过一次次的向下调整来将其变成一个堆。

堆排序的过程

ok代码实现问题明日再学习。

三、学习碎碎念

慢慢开始上难度了,今天上算法课回答问题了,根据之前自己的冒泡排序的笔记,果然是一份耕耘一份收获啊。也想对自己说别太浮躁,别太着急,慢慢来,一步一个脚印,踏踏实实的,努力的去迎接自己的未来。

这篇关于备战蓝桥杯Day19 - 堆排序基础知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757304

相关文章

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘

数据结构:二叉树详解 c++信息学奥赛基础知识讲解

目录 一、二叉树的定义 二、二叉树的形态 三、二叉树的性质 四、二叉树的存储 五、二叉树的创建与遍历(递归) 六、二叉树实现 创建二叉树 展示二叉树 1、计算数的高度 2、计算数的叶子数量 3、计算数的宽度 4、层次遍历 5、前序遍历 递归写法 非递归写法 6、中序遍历 递归写法 非递归写法 7、后序遍历 递归写法 非递归写法 8、输出根节点到所有叶

C/C++语言基础知识 之 引用和指针

关于引用 引入是C++引入的新语言特性。 1 int &rn = a;-----------------------------------------------2 int* p = &a;3 int* &pa = p;4 (*pa)++;5 pa = &b;6 (*pa)++; L1:声明rn为变量a的一个引用,不需要为rn另外开辟内存单元。rn和a占

C语言常见面试题3 之 基础知识

(1)i++和++i哪个效率更高? 对于内建数据类型,二者效率差别不大(去除编译器优化的影响) 对于自定义数据类型(主要是类),因为前缀式(++i)可以返回对象的引用;而后缀式(i++)必须返回对象的值,所以导致在大对象时产生了较大的复制开销,引起效率降低。 (2)不使用任何中间变量如何交换a b的值? void swap(int& a, int& b)//采用引用传参的方式{a^=

C++基础知识——引用

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。                                               博主主页:Yan. yan.                                               C语言专

音视频开发基础知识(1)——图像基本概念

像素 **像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。**在下面这张图中,你可以看到一个个方块,这些方块就是像素。 分辨率 图像(或视频)的分辨率是指图像的大小或尺寸。我们一般用像素个数来表示图像的尺寸。比如说一张1920x1080的图像,前者1920指的是该图像的宽度方向上有1920个像素点,而后者1080指的是图像的高 度方向上有1080个像素点。

堆排序(第6章)

根据《算法导论》第6章堆排序算法编写,程序可运行。 #include <STDIO.H>#include <STDLIB.H>#include <MATH.H>/*求父节点的下标*/int PARENT(int i){double a=i/2.0;return (int)ceil(a)-1; }/*求左孩子的下标*/int LEFT(int i){return 2*i+1;

小柴带你学AutoSar系列一、基础知识篇(6)车规级MCU入门RH850

flechazohttps://www.zhihu.com/people/jiu_sheng 小柴带你学AutoSar总目录https://blog.csdn.net/qiansh

理解堆排序

堆排序(Heapsort)是一种基于堆这种数据结构的排序算法,但在实际实现中,堆通常是用数组来表示的。这种方法充分利用了数组的特性,使得堆的操作更加高效。下面通过详细解释和举例说明来帮助理解这种排序方式。 堆的数组表示 一个堆是一种完全二叉树,可以通过数组方便地表示: 对于一个节点在数组中的索引i: 它的左子节点的索引是 2*i + 1它的右子节点的索引是 2*i + 2其父节点的索引是 (

面试题之基础知识

参考答案   b d  b   b d