数据结构-分析期末选择题考点(排序)

何似清歌倚桃李

一炉沈水醉红灯

契子 


上一期给大家提供了大概会考的题型给老铁们复习的大致思路

这一期还会是一样,我将整理一下排序的题型以及解题方法给你们

由于时间还很多,我就慢慢总结吧,一天一章的样子,明天总结串、后天总结图

然后坦然的走向期末考的刑场


 我们还是先来讲一下排序吧?我对这块比较熟

排序重点考快排的方法,分析时间复杂度、稳定性

考排序的话,快排是必考的,因为太重要了

如果快排还不懂的老铁,可以去看看我之前的文章:手撕快排(点击链接即刻跳转

我们二叉树中不是还有个堆吗?我遇到的题中往往是结合排序来考的 -- 堆排序。题型大概就是初始化建堆。如果还有对堆了解还不够深刻的老铁,请看这篇文章:堆排序

然后其他的题型便是:给出一些排序考你稳定性以及时间复杂度了,这里稍微去翻一下课本就行

(1)快排(常考排完一次快排后的序列)大概率会考 == 必考

我说的都是有根据的,都是自己做到的作业题以及结合一些考试因素,所以可以选择相信我

(2)堆排序(初始化建堆)高几率

(3)时间复杂度、稳定性(感觉排序也少不了的一环)

(4)环境题 -- 给出一个案例让你选择最优排序(这个很少见,考对所有排序的概念理解,但是学校应该不会为难你吧,不放心的话可以看看)

排序的考点大概就是这些,考的不多大概就两三道打底的样子(一本正经的分析)

但是这分能捡就,说不定离不挂科就差这几分呢?


废话说完了,直接上题吧 ~

快排的模拟

我们把这一类题称为快排的模拟,因为方法就是画图模拟快排的实现

以30为基准,设一组初始记录关键字序列为(30,15,40,28,50,10,70)
则第一趟快速排序结果为()
A、10,28,15,30,50,40,70
B、10,15,28,30,50,40,70
C、10,28,15,30,40,50,70
D、10,15,28,30,40,50,70

我先教老铁们模拟一遍,在公布答案:
首先说明一下快排的常识(排序思想)吧 ~ 为了以下好讲(为了照顾小白)

快排思想

任取待排序元素序列中的某元素作为 基准值 ,按照该排序将待排序集合分割成两子序列,左子序列中所有元素均 小于 基准值,右子序列中所有元素均 大于 基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止

而我们之前的方法则是双指针思想:模拟两个指针 leftright 分别指向首尾位置,然后 right 先找比基准小的元素,left 再找比基准大的元素,找到后交换。重复以上步骤,直到两者相遇。在这个时候,我们的相遇点的元素与基准值进行交换这样我们的一趟快排就结束了

(觉得很空洞的可以看我之前的博客)

但是如果我们做选择题的话还有简单方法,我们就不用以上方法了,我之所以提一下以上方式只是为了让大家回顾一下快排而已,接下来我将在题目的讲解中教会大家这种方法


对于模拟题的最好解法就是画图:

<1>根据题目的要求我们选择 30 作为基准 key,一般都是第一个位置的元素作为基准,然后我们依旧是采用双指针,也就是 left 指向剩余元素的起始位置,right 指向剩余元素的末尾位置,如下图所示:

<2>我们将基准元素单独拉出来,留有一个空缺位置,像这样:

这个时候准备工作已经做完了,可以开始操作了

<3>我们先从右边开始找到比基准值还要小的元素

我们找到的元素是 10,就塞到那个空缺的位置中

<4>其次我们从左边开始找比基准值大的元素

我们找到的是 40 也塞到空缺的位置中

重复以上操作

<5>当我们的双指针重叠时,就将 30 塞回空缺位置中

这样我们就完成了一趟快排,实在不知道为什么这样做的老铁先去看一下快排吧,我这里只教方法

这道题的正确答案:B

 也不知道,大家对上题了解了多少,这里再提供一道

对数字序列28 16 32 12 60 2 5 72进行升序的快速排序(以第一个关键码为基准的方法)
一次划分后的结果为()
A.2 5 12 16 28 60 32 72
B.2 16 5 12 28 60 32 72
C.2 16 12 5 28 60 32 72
D.5 16 2 12 28 32 60 72

我们这次干脆换一种方法吧 ~ 用我们快排的原始方法:

一开始与上面那题同理,找到基准,再固定双指针

<1>右边开始先找小于基准的元素,左边再找大于基准的元素

我们找到的是 5 后,左边在开始找

<2>数据都找到了便交换两者的数据

<3>重复以上步骤

<4>当两个指针相遇时,便让当前数据与基准值 key 做交换

所以答案选择:B

解析:

快速排序以基准值为中心,对元素进行划分,这里 28 为基准值,则小于 28 的和大于 28 的进行交换,完成一次划分

这样我们的快排模拟的题型就告以段落吧,接下来我们来看看堆排序的题型

现有数字序列 5 11 7 2 3 17,目前要通过堆排序进行降序排序
那么由该序列建立的初始堆应为()
A.2 3 7 11 5 17
B.17 11 7 2 3 5
C.17 11 7 5 3 2
D.2 3 5 7 11 17

我们先来分析一下题目,对堆还不了解的去点上面的链接:

这里说进行降序排序,所以我们要建堆,每次把堆顶元素放在当前堆的最后一个位置

建堆要进行向下调整算法(从最后一个非叶子节点开始进行向下调整算法,直到根元素

我们这里就简单的模拟一下吧:

堆简单来说就是二叉树的数组表现形式,这里我们通过堆模拟一下二叉树

然后从我们的叶子节点开始,因为我们是建立小堆,那么最小的元素肯定是排在上面的

知道这个原理我们就来开始调整

因为 2 (左孩子)比 3(右孩子)小也比 11(双亲)小

所以我们就要调整 2 与 11 的位置(根据小堆原理,最小元素排在上面)

重复上面步骤开始建堆

最后我们建堆完成后便是这个样子:

然后转化为我们的数组,所以初始堆序列为: 2 3 7 11 5 17

因此答案:A

 所以像这种送分题务必拿下 ~

 画图题基本上已经讲完了,我们来看一下概念题 ~

下列排序算法中,占用辅助空间最多的是()
A.归并排序
B.快速排序
C.希尔排序
D.堆排序

答案:A

解析:

归并排序空间复杂度:n

快排: logn

希尔、堆排: 1


下列关于排序方法和其平均时间复杂度,配对错误的是()
A.堆排序——O(nlog2 n)
B.直接插入排序——O(n^2)
C.选择排序——O(n^2)
D.归并排序——O(n^2)

答案:D

解析:

归并排序是二分排序,其实际复杂度为 nlogn


下列排序方法中,每一趟排序结束时都至少能够确定一个元素最终位置的方法是( )① 选择排序② 归并排序③ 快速排序④ 堆排序A.①④
B.①②④
C.①③④
D.①②③④

这种题就考的是对所有排序的模拟了,需要你了解所有排序的实现原理,属于偏难的题目,小概率会出

答案:C

解析:

(1)选择排序每次选一个最值,放在最终的位置

(2)快速排序每次基准值的位置也可以确定

(3)堆排序每次堆顶元素的位置也可以确定

所以这三种方法都可以每次至少确定一个元素的位置

(4)归并排序每次都需要对 n 个元素重新确定位置,所以不能保证每次都能确定一个元素位置,有可能每次排序所有元素的位置都为发生变化


下列排序方法中,哪一种是不稳定的()
A.直接插入排序
B.归并排序
C.选择排序
D.冒泡排序

答案:C

解析:

(1)直接插入一般可以从前向后进行元素的插入,相同元素的相对位置可以不发生变化

(2)归并也可以保证相对位置不变

(3)冒泡排序在元素相同的情况下也可以不进行交互,也可以保证稳定

(4)选择排序的思想是每次选出最值,放在已排序序列的末尾,如果最值有多个,而选出的为最后一个最值,会导致相对位置发生变化


下列关于归并排序的说法中正确的是()
A.归并排序不需要辅助空间
B.归并排序的时间复杂度是O(logn)
C.归并排序是稳定排序
D.归并排序的操作方式类似二叉树的前序遍历

答案:C

解析:

(1)归并排序需要一个辅助空间暂时保存部分区间的排序元素

(2)归并排序是一种二分排序算法,每次都需要给 n 个元素排序,排序的过程需要 logn,即树的高度,所以时间复杂度为 nlogn

(3)归并排序中,相同元素的相对位置不会发生变化,所以是稳定排序

 

本期就介绍到这里吧,排序的话应该考的不多,但是快排必考(经验+直觉)

我们下期再见 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/36114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis源码分析--一级缓存、二级缓存原理

前言&#xff1a; 有点项目经验的朋友都知道缓存的重要性是不言而喻的&#xff0c;不仅仅我们在开发项目业务功能的时候使用了各种缓存&#xff0c;框架在设计的时候也有框架层面的缓存&#xff0c;尤其在查询多的场景下&#xff0c;缓存可以大大的减少数据库访问&#xff0c;…

微前端框架是为了解决项目应用在大型项目中带来的复杂性和维护难题而提出的技术方案。

微前端框架是为了解决单页应用&#xff08;SPA&#xff09;在大型项目中带来的复杂性和维护难题而提出的技术方案。Qiankun.js、MicroApp 和 Wujie 是三种流行的微前端框架。以下是对这三种框架的优缺点分析&#xff1a; Qiankun.js 优点 成熟度高&#xff1a;Qiankun.js 基…

【知识学习】阐述Unity3D中FogLOD的概念及使用方法示例

在Unity3D中&#xff0c;Fog&#xff08;雾效&#xff09;和LOD&#xff08;Level of Detail&#xff0c;细节层次&#xff09;是两种用于提高场景视觉效果和性能的技术。 Fog&#xff08;雾效&#xff09; 雾效是一种视觉效果&#xff0c;用于模拟大气中的雾或烟&#xff0c…

YOLOv8数据集标注

1 简介 数据集是必不可少的部分&#xff0c;数据集的优劣直接影响训练效果。一般来说&#xff0c;一个完整的数据集应该包括训练集、测试集和验证集。通常&#xff0c;数据集会被划分为训练集和测试集&#xff0c;比如将数据集的70%用作训练集&#xff0c;30%用作测试集。在进行…

信号处理——时频分析

经典傅里叶变换的限制&#xff1a; 1、只能反映信号的整体特性&#xff1b;&#xff08;完全是时域或频域&#xff09; 2、要求信号满足平稳条件&#xff1b; 3、必须获得时域中的全部信息。 所以引入时频分析&#xff0c;同时使用时间和频率的联合函数来表示信号。 1 时频…

提高数据融合效率和数据成果质量工作流的可行性分析

第一章 引言 本文基于对框架数据、地名地址数据以及变更调查数据为主体数据源的分析&#xff0c;结合数据融合中分层数据处理原则和内容&#xff0c;从数据管理者、数据应用的角度提出数据质量的定位、需求定位&#xff0c;归纳数据融合过程中存在的困难&#xff0c;提出了数据…

FANUC喷涂机器人P-350iA电机过热维修解决方案

发那科喷涂机器人作为自动化喷涂生产线的重要组成部分&#xff0c;其性能稳定性和可靠性对于生产效率和产品质量具有重要影响。然而&#xff0c;在实际使用过程中&#xff0c;FANUC喷涂机器人P-350iA电机过热故障问题往往成为影响其正常运行的主要因素之一。 FANUC机器人M-100…

一款开源免费的现代化风格的Avalonia控件库

前言 Citrus.Avalonia是一款开源&#xff08;MIT License&#xff09;、免费的现代化风格的Avalonia控件库。 Avalonia介绍 Avalonia是一个强大的框架&#xff0c;使开发人员能够使用.NET创建跨平台应用程序。它使用自己的渲染引擎绘制UI控件&#xff0c;确保在Windows、mac…

推荐系统数据集——Amazon-Book

在推荐系统中&#xff0c;像Amazon-Book这样的数据集通常包含用户和物品的交互信息。为了训练模型&#xff0c;这些数据需要转换成适合模型输入的格式。在这种情况下&#xff0c;item_list和user_list需要转换成train.txt文件&#xff0c;通常包含用户ID和物品ID的交互记录。 …

你的生日是星期几?HTML+JavaScript帮你列出来

0 源起 上周末&#xff0c;大宝发现今年自己的生日不是周末&#xff0c;这样就不好约同学和好友一起开生日Party了&#xff0c;很是郁闷。一直嘀咕自己哪年的生日才是周末。 于是我用JavaScript写了一个小程序来帮她测算了未来100年中每年的生日分别是星期几。 1 设计交互界面…

搭建大型分布式服务(四十一)SpringBoot 整合多个kafka数据源-支持亿级消息生产者

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

【ARM】MCU和SOC的区别

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解SOC芯片和MCU芯片的区别 2、 问题场景 用于了解SOC芯片和MCU芯片的区别&#xff0c;内部结构上的区别。 3、软硬件环境 1&#xff09;、软件版本&#xff1a;无 2&#xff09;、电脑环境&#xff1a;无 3&am…

Java——枚举

1. 概念 枚举是在JDK1.5之后引入的&#xff0c;主要用途是&#xff1a;将一组常量组织起来&#xff0c;在这之前表示一组常量通常使用定义常量的方式&#xff1a; public static final int RED 1; public static final int GREEN 2; public static final int BLACK 3;但是…

第 12 课:基于隐语的VisionTransformer框架

基于之前MPC的基础知识&#xff0c;本讲主要内容是MPCViT基于SecretFlow的VisionTransformer框架&#xff0c;主要从神经网络架构&#xff0c;隐私推理框架和实验结果三方面介绍。 一、MPCViT&#xff1a;安全且高效的MPC友好型 Vision Transformer架构 MPCViT隐私推理总体框架…

QT中子工程的创建,以及如何在含有库的子工程项目中引用主项目中的qt资源

1、背景 在qt中创建多项目类型,如下: CustomDll表示其中的一个动态库子项目; CustomLib表示其中的一个静态库子项目; MyWidget表示主项目窗口(main函数所在项目); 2、qrc资源的共享 如何在CustomDll和CustomLib等子项目中也同样使用 MyWidget项目中的qrc资源呢??? 直…

【项目实训】后端逻辑完善

经测试&#xff0c;我们决定前端可以同时选择多个类型的岗位进行查询&#xff0c;以显示相应的公司岗位信息 于是&#xff0c;修改后端函数的逻辑&#xff1a; 后端 首先&#xff0c;因为要对checkList中的job_name进行模糊匹配查询&#xff0c;于是使用以下代码&#xff1a…

【科学计算与可视化】3. Matplotlib 绘图基础

安装 pip install matplotlib 官方文档 https://matplotlib.org/stable/api/pyplot_summary.html 主要介绍一些图片绘制的简要使用&#xff0c;更加详细和进阶需要可参考 以上官方文档。 1 绘制基础 方法名说明title()设置图表的名称xlabel()设置 x 轴名称ylabel()设置 y 轴…

负载组指南说明-负载柜

什么是负载组&#xff1f; 负载组是一种设备&#xff0c;旨在准确模拟电源在实际应用中看到的负载。这种负载组可以用电阻、电感或电容元件构建。它是一种电阻装置&#xff0c;以热量的形式消散一定量的能量&#xff0c;可以通过自然对流、强制空气或水冷系统去除。 为什么要使…

江协科技51单片机学习- p11 Proteus安装模拟51单片机

前言&#xff1a; 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记&#xff0c;在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用&#xff1a; Proteus快速入门&…

可溶性聚四氟乙烯离子交换柱PFA层析柱微柱一体成型

PFA微柱&#xff0c;也叫PFA层析柱、PFA离子交换柱等&#xff0c;主要用于地质同位素超净化、痕量、超痕量、微量元素分析实验室。 规格参考&#xff1a;1.5ml、15ml、30ml等。 其主要特性有&#xff1a; 1、PFA层析柱&#xff08;微柱&#xff09;专为离子交换设计&#xff…