【数据结构】——排序的相关习题

目录

  • 一、选择填空判断题
    • 题型一(插入排序——直接插入排序)
    • 题型二(插入排序——折半插入排序)
    • 题型三(插入排序——希尔排序)
    • 题型四(交换排序——冒泡排序)
    • 题型五(交换排序——快速排序)

一、选择填空判断题

题型一(插入排序——直接插入排序)

1、对n个元素进行直接插入排序,需要进行()趟处理。
A、n
B、n+1
C、n-1
D、2n

解析:(C)
直接插入排序是将要排序的序列按照关键字的大小插入至已排好序的子序列中,一直进行直到整个序列有序,所以对n个元素进行直接插入排序,一共插入元素n-1次,需要进行n-1趟

2、对5个不同的数据元素进行直接插入排序,则最多需要进行的比较次数为()。
A、8
B、10
C、15
D、25

解析:(B)
考虑最坏情况下为最多需要进行的比较次数,即序列元素呈逆序排列时最多,由于此时从前到后依次需要比较1次、2次、3次、……、n-1次,所以n(n-1)/2=(5×4)/2=10。

3、对n个元素进行直接插入排序,最好情况下的时间复杂度为(),最坏情况下的时间复杂度为()。
A、O(n),O(n2)
B、O(n2),O(n)
C、O(n),O(n)
D、O(n2),O(n2)

解析:(A)
最好情况下,即序列元素都有序,此时只需比较元素而不需移动元素,比较次数为n-1次,故最好时间复杂度为O(n);而最坏情况下,即序列元素呈逆序排列时,此时比较次数和移动次数都到达最大值,均为n(n-1)/2,故最坏时间复杂度为O(n2);考虑平均情况,总的比较次数和移动次数约为n2/4,故直接插入排序的时间复杂度为O(n2)。

4、对n个元素进行直接插入排序,其空间复杂度为()
A、O(n)
B、O(1)
C、O(n2)
D、O(log2n)

解析:(B)
直接插入排序代码如下:

/*直接插入排序(由小到大)*/
void InsertSort(int r[],int n) {int i,j,temp;for(i=1; i<n; ++i) {temp=r[i];	//将要插入的元素暂存在temp中for(j>=0,j=i-1;temp<r[j];--j)r[j+1]=r[j];	//向后挪一位 r[j+1]=temp;	//找到插入位置并插入}
}

由于直接插入排序中只使用了辅助变量,故空间复杂度为O(1)。

5、若排序的元素序列呈基本有序的前提下,选用效率最高的排序算法是()。
A、简单选择排序
B、快速排序
C、直接插入排序
D、归并排序

解析:(C)
由于序列基本有序,应该选用平均复杂度最小的排序算法。直接/折半插入排序、简单选择排序、冒泡排序都是简单型的排序算法,平均时间复杂度均为O(n2),但最好情况下,直接插入排序和冒泡排序可以达到O(n),折半插入排序可以达到O(nlog2n);堆排序、快速排序、归并排序都是改进型的排序算法,所以其时间复杂度均为O(nlog2n),在最好情况下可以达到O(nlog2n)。

题型二(插入排序——折半插入排序)

1、对n个元素进行折半插入排序,最好情况下的时间复杂度为(),最坏情况下的时间复杂度为()。
A、O(n2),O(nlog2n)
B、O(n),O(n2)
C、O(n2),O(n)
D、O(nlog2n),O(n2)

解析:(D)
折半插入排序与直接插入排序相比减少了比较元素的次数,其移动次数与直接插入排序是一样的。 先折半查找当前元素的插入位置,此时的时间复杂度为O(nlog2n),然后移动插入位置之后的所有元素,此时的时间复杂度为O(n2),故最好时间复杂度为O(nlog2n);而最坏情况下,故最坏时间复杂度为O(n2);考虑平均情况下,折半插入排序的时间复杂度仍为O(n2)。

2、对n个元素进行折半插入排序,其空间复杂度为()
A、O(n)
B、O(1)
C、O(n2)
D、O(log2n)

解析:(B)
折半插入排序代码如下:

/*折半插入排序*/
void Binary_InsertSort(int r[],int n) {int i,j,temp,low,high,mid;for(i=1; i<=n; i++) {	 temp=r[i];	//将要插入的元素暂存在temp中low=0;high=i-1;	//low和high为折半查找的范围 while(low<=high) {mid=(low+high)/2;	//mid取中间点 if(r[mid]>temp)	//查找左半子表 high=mid-1;else	//查找右半子表 low=mid+1;}for(j=i-1; j>=high+1; j--)	//先后移动元素,空出位置留给插入元素 r[j+1]=r[j];r[j+1]=temp;	//找到插入位置并插入	}
}

由于折半插入排序中只使用了辅助变量,故空间复杂度与直接插入排序相同,也为O(1)。

题型三(插入排序——希尔排序)

1、对初始数据序列(8, 3, 9, 11, 2, 1, 4, 7, 5, 10, 6)进行希尔排序。若第一趟排序结果为(1, 3, 7, 5, 2, 6, 4, 9, 11, 10, 8),第二趟排序结果为(1, 2, 6, 4, 3, 7, 5, 8, 11, 10, 9),则两趟排序采用的增 量(间隔)依次是()。
A、3,1
B、3,2
C、5,2
D、5,3

解析:(D)
在这里插入图片描述
在这里插入图片描述
故两趟排序采用的增量依次为5和3。

2、希尔排序的组内排序采用的是()。
A、直接插入排序
B、折半插入排序
C、快速排序
D、归并排序

解析:(A)
希尔排序也称为缩小增量排序,它是通过选取一定的增量来排序的,其本质还是插入排序,通过增量将序列分为几个子序列,然后对每个子序列进行直接插入排序,当所有序列呈基本有序时,再进行一次直接插入排序即完成。

3、以下排序中,不稳定的排序算法是()。
A、冒泡排序
B、直接插入排序
C、希尔排序
D、归并排序

解析:(C)
由于分为不同子序列后,可能会出现改变其相对位置情况,所以希尔排序是不稳定的。

题型四(交换排序——冒泡排序)

1、对n个元素进行冒泡排序,最好情况下的时间复杂度为(),最坏情况下的时间复杂度为()
A、O(n2),O(n)
B、O(n),O(n2)
C、O(n),O(n)
D、O(n2),O(n2)

解析:(B)
最好情况下,即待排序结果恰好是排序后的结果,此时比较次数为n-1,移动次数和交换次数都为0,故最好时间复杂度为O(n);而最坏情况下,即排好的序列刚好与初始序列相反,呈逆序排列,则此时需要进行n-1趟排序,第i趟排序中要进行n-i次比较,即比较次数=交换次数=n(n-1)/2,由于每次交换都会移动3次元素从而来交换元素,即移动次数为3n(n-1)/2,故最坏时间复杂度为O(n2),而考虑平均情况下,故冒泡排序的时间复杂度为O(n2);

2、若用冒泡排序算法对序列{10、14、26、29、41、52}从大到小排序,则需要进行()次比较。
A、3
B、10
C、15
D、25

解析:(C)
52冒泡到最前面,比较5次;41冒泡到最前面,比较4次,……,所以一共比较次数为5+4+3+2+1=15次。

3、(多选)以下算法中,每趟排序时都能确定一个元素的最终排序位置的算法有()。
A、直接插入排序
B、折半插入排序
C、希尔排序
D、冒泡排序
E、快速排序
F、简单选择排序
G、堆排序

解析:(D、F、G)
冒泡排序、简单选择排序、堆排序每趟可确定一个元素的最终位置,堆排序中每趟形成整体有序的子序列,而快速排序只是确定枢轴元素的最终位置。

题型五(交换排序——快速排序)

1、对n个元素进行快速排序,若每次划分得到的左右子区间中的元素个数相等或只差一个,则排序的时间复杂度为()。
A、O(1)
B、O(nlog2n)
C、O(n2)
D、O(n)

解析:(B)
快速排序是对冒泡排序的一种改进算法,它又称为分区交换排序,通过多次划分操作来实现排序思想。每一趟排序中选取一个关键字作为枢轴,枢轴将待排序的序列分为两个部分,比枢轴小的元素移到其前,比枢轴大的元素移到其后,这是一趟快速排序,然后分别对两个部分按照枢轴划分规则继续进行排序,直至每个区域只有一个元素为止,最后达到整个序列有序。
当每次划分很平均时,即最好时间复杂度为O(n2);而当序列原本正序或逆序时,此时性能最差,由于每次选择的都是最靠边的元素,即最坏时间复杂度为O(nlog2n);故快速排序的平均时间复杂度为O(nlog2n)。

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

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

相关文章

时空预测 | 线性时空预测模型、图时空预测

目录 线性时空预测图时空预测 线性时空预测 这篇文章在时空预测领域&#xff0c;搭建了一个简单高效的线性模型&#xff0c;且使用了channel-independence的方式进行建模。 模型的整体结构如下图所示&#xff0c;是一个级联的结构。输入分为三个部分&#xff1a;temporal embed…

2核2G3M带宽服务器腾讯云和阿里云价格、性能对比

2核2G云服务器可以选择阿里云服务器或腾讯云服务器&#xff0c;腾讯云轻量2核2G3M带宽服务器95元一年&#xff0c;阿里云轻量2核2G3M带宽优惠价108元一年&#xff0c;不只是轻量应用服务器&#xff0c;阿里云还可以选择ECS云服务器u1&#xff0c;腾讯云也可以选择CVM标准型S5云…

【网络安全】图解 Kerberos:身份认证

图解 Kerberos&#xff1a;身份认证 1.什么是 Kerberos &#xff1f;2.Kerberos 基本概念2.1 基本概念2.2 KDC 3.Kerberos 原理3.1 客户端与 Authentication Service3.2 客户端与 Ticket Granting Service3.3 客户端与 HTTP Service Kerberos 是一种身份认证协议&#xff0c;被…

Java事件机制简介 内含面试题

面试题分享 云数据解决事务回滚问题 点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮…

预推免,保研------长安大学保内,附加分面试准备【记录帖】

&#x1f680;长安大学——人工智能系——程惠泽 &#x1f68c;前六学期专业排名&#xff1a;9/82 &#x1f68c;信息门户GPA&#xff1a;3.94 &#x1f68c;平均成绩&#xff1a;89.83 &#x1f68c;加权成绩&#xff1a;89.15 / ☁️本人比较菜&#xff0c;只能保研本校&…

centos 端口被占用的快速排查方式

问题笔记 centos 端口被占用的快速排查方式 centos 端口被占用的快速排查方式 这里说一个我刚刚遇到的问题&#xff0c;解决步骤用来记录&#xff0c;方便以后自己查询。 nginx配置完index.html测试文件&#xff0c;发现一直显示的404页面。 我跑到服务器上想重启一下nginx …

强大易用的开源 建站工具Halo

特点 可插拔架构 Halo 采用可插拔架构&#xff0c;功能模块之间耦合度低、灵活性提高。支持用户按需安装、卸载插件&#xff0c;操作便捷。同时提供插件开发接口以确保较高扩展性和可维护性。 ☑ 支持在运行时安装和卸载插件 ☑ 更加方便地集成三方平台 ☑ 统一的可配置设置表…

《自然语言处理(NLP)的最新进展:Transformers与GPT-4的浅析》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

2023年9月11日-9月16日(上午熟悉公司代码,周一到周五晚上优先工作所急视频教程,其他业余时间进行ue视频教程,为独立游戏做准备)

按照规划&#xff0c;上午熟悉公司源码&#xff0c;下午进行filament和ue渲染&#xff0c;晚上写工作代码。回家后泛读pbrt或者其他书籍催眠。 业余学习ue的各种视频教程&#xff0c;为独立游戏做准备&#xff08;公司也实行末位淘汰&#xff0c;给自己留条后路&#xff09;。累…

openGauss学习笔记-65 openGauss 数据库管理-创建和管理数据库

文章目录 openGauss学习笔记-65 openGauss 数据库管理-创建和管理数据库65.1 前提条件65.2 背景信息65.3 注意事项65.4 操作步骤65.4.1 创建数据库65.4.2 查看数据库65.4.3 修改数据库65.4.4 删除数据库 openGauss学习笔记-65 openGauss 数据库管理-创建和管理数据库 65.1 前提…

解决deepspeed框架的bug:不保存调度器状态,模型训练重启时学习率从头开始

deepspeed存在一个bug&#xff0c;即在训练时不保存调度器状态&#xff0c;因此如果训练中断后再重新开始训练&#xff0c;调度器还是会从头开始而不是接着上一个checkpoint的调度器状态来训练。这个bug在deepspeed的github中也有其他人提出&#xff1a;https://github.com/mic…

k8s中的容器

目录 容器容器的状态容器的重启策略pause容器init容器 容器 容器的状态 Running&#xff08;运行中&#xff09;&#xff1a;容器正在运行并且正常工作。Waiting&#xff08;等待中&#xff09;&#xff1a;容器正在等待某些条件满足&#xff0c;例如等待其他容器就绪、等待网…

微信小程序——如何获取到输入框的值

在微信小程序中&#xff0c;可以通过以下几种方式来获取输入框的值&#xff1a; 使用 bindinput 绑定输入事件&#xff0c;通过 event.detail.value 获取输入框的值。具体操作如下&#xff1a; <input bindinput"onInput" placeholder"请输入内容">…

Google 开源库Guava详解(集合工具类)—Maps、Multisets、Multimaps

一、Maps Maps有许多很酷的实用程序&#xff0c;值得单独解释。 1、uniqueIndex Maps.uniqueIndex&#xff08;Iterable&#xff0c;Function&#xff09;解决了一个常见的情况&#xff0c;即有一堆对象&#xff0c;每个对象都有一些唯一的属性&#xff0c;并希望能够根据该…

Neo4j 基本语法

一、基本语法 1、新建节点 &#xff08;1&#xff09;基本语法&#xff1a; () 代表节点 示例&#xff1a; CREATE (u:User {uid:970939424 }) // 节点类型为User&#xff0c;属性值为uid970939424CREATE (u:Round {rid:7194842697444819113 }) // 节点类型为Rou…

【广州华锐互动】AR技术在配电系统运维中的应用

随着科技的不断发展&#xff0c;AR(增强现实)技术逐渐走进了我们的生活。在电力行业&#xff0c;AR技术的应用也为巡检工作带来了许多新突破&#xff0c;提高了巡检效率和安全性。本文将从以下几个方面探讨AR配电系统运维系统的新突破。 首先&#xff0c;AR技术可以实现虚拟巡检…

数据仓库-核心概念

数据仓库 数据仓库&#xff0c;英文名称为Data Warehouse&#xff0c;可简写为DW或DWH。数据仓库&#xff0c;是为企业所有级别的决策制定过程&#xff0c;提供所有类型数据支持的战略集合。它是单个数据存储&#xff0c;出于分析性报告和决策支持目的而创建。为需要业务智能的…

<图像处理> 空间滤波基础

空间滤波基础 图像滤波是一种常见的图像处理技术&#xff0c;用于平滑图像、去除噪音和边缘检测等任务。图像滤波的基本原理是在进行卷积操作时&#xff0c;通过把每个像素的值替换为该像素及其邻域的设定的函数值来修改图像。 预备知识&#xff1a;可分离滤波核、边缘填充。…

Vue知识系列(1)每天10个小知识点

目录 系列文章目录知识点**1. Vue修饰符**的概念、作用、原理、特性、优点、缺点、区别、使用场景**2. 双向数据绑定**的概念、作用、原理、特性、优点、缺点、区别、使用场景**3. MVVM、MVC、MVP** 的概念、作用、原理、特性、优点、缺点、区别、使用场景**4. slot** 的概念、…

Android Jetpack架构组件库:Hilt

一、开发者官网关于Hilt库使用链接如下 使用 Hilt 实现依赖项注入 Hilt版本说明 二、工程目录图 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;LearnJetpack-hilt&#xff1a;hilt版本2.48 代…