排序(408)

news2024/10/10 0:25:41

一、插入排序(直接、折半、希尔)

【2009统考】若数据元素序列{11,12,13,7,8,9,23,4,5}是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是(B)

A、冒泡排序        B、插入排序        C、选择排序        D、2路归并排序

解析:11、12、13、7、8、9、23、4、5

A、C都是一趟排序后必定有一个元素在最终位置上,2路归并排序经过第二趟排序后应该每四个有序

B是前n个有序

【2012统考】对同一待排序序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是(D)

A、排序的总趟数                    B、元素的移动次数        

C、使用辅助空间的数量        D、元素之间的比较次数

解析:

折半插入:在寻找待插入位置时,使用折半查找。总趟数仍然是元素的个数,不同的元素之间比较的次数,折半插入排序 < 插入排序。

次数:折半,nlog2n;直接,n^2

【2014统考】用希尔排序对一个数据序列进行排序时,若第1趟排序结果为9,1,4,13,7,8,20,23,15,则该趟排序采用的增量可能是(B)

A、2        B、3        C、4        D、5

解析:

d1 = 3: 

(a1,a4,a7) = (9,13,20),(a2,a5,a8) = (1,7,23),(a3,a6,a9) = (4,8,15),符合希尔排序

希尔排序,选择增量d,增量序列(i , i + d , i + 2d ……)中的元素进行排序

【2018统考】对初始数据序列(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),则两趟排序采用的增量依次是(D)

A、3,1        B、3,2        C、5,2        D、5,3

解析:排除法

第一趟:"1"在第一个位置,证明"1"与第一个元素交换了位置,选项中增量只有3和5,若选择增量3则与8交换的是4,排除AB;

第二趟:"2"和"3"位置互换,若选择增量2则无法交换2、3,所以增量为3

二、交换排序(冒泡、快速)

【2010统考】采用递归方式对顺序表进行快速排序。下列关于递归次数的叙述中,正确的是(D)

A、递归次数与初始数据的排列次序无关

B、每次划分后,先处理较长的分区可减少递归次数

C、每次划分后,先处理较短的分区可减少递归次数

D、递归次数与每次划分后得到的分区的处理顺序无关

解析:

递归的次数只与各元素的初始排列有关。若每次划分的分区比较平衡,则递归次数少;若分区不平衡,递归次数多。与处理顺序无关

【2014统考】下列选项中,不可能是快速排序第2趟排序结果的是(C)

A、2,3,5,4,6,7,9        B、2,7,5,6,4,3,9        C、3,2,5,4,7,6,9        D、4,2,3,5,7,6,9

解析:

快排每次会有大于等于i个元素在最终位置上

         2、3、4、5、6、7、9

C、  3、2、5、4、7、6、9 只有一个,所以不可能是第二趟排序的结果

【2016统考】已知由n(n = 2、3、……)个正整数构成的集合A = {ak|0 <= k < n },将其划分为两个不相交的子集A1和A2,元素个数分别是n1和n2,A1和A2中的元素之和分别为S1和S2.设计一个尽可能高效的划分算法,满足|n1-n2|最小且|S1-S2|最大。要求:

1)给出算法基本思想

2)根据设计思想,采用C或C++语言描述算法,关键之处给出注释

3)说明该算法的时间复杂度和空间复杂度

解析:

1)将最小的n/2个元素放在A1中,其余的元素放在A2中。

*i = n / 2,则分组完成

**i < n / 2,枢纽之前的所有元素均属于A1,继续对i之后对元素进行划分

***i > n / 2,枢纽之后对所有元素均属于A2,继续对i之前对元素进行划分

2)

int setPartition(int a[],int n)
{
int pivot,low=0,high=n-1,low0=0,high0=n-1,flag=1,k=n/2,i;
int s1=0,s2=0;
while(flag){
    pivot = a[low];
    while(low<high){
    while(low<high && a[high]>=pivot) high—-;
    if(low!=high) a[low] = a[high];
    while(low<high && a[low]<=pivot) low++;
    if(low!=high) a[high] = a[low];
    }
a[low] = pivot;
if(low == k-1) //枢纽是第n/2个小的元素
    flag=0;
else{
    if(low<k-1){    //小于一半,对右边划分
        low0 = ++low;
        high = high0;
    }
    else{    //大于一半,对左边划分
        high0 = —-high;
        low = low0;
        }
       }
    }
    for(i = 0; i < k ;i ++) s1+=a[i];
    for(i = k; i < n ;i ++) s2+=a[i];
    return s2-s1;
}

三、选择排序

【2011统考】已知序列25,13,10,12,9是大根堆,在序列尾部插入新元素18,将其再调整为大根堆,调整过程中元素之间进行的比较次数是(B)

A、1        B、2        C、4        D、5

解析:堆——完全二叉树,一层满了才放下一层

【2015统考】已知小根堆为8,15,10,21,34,16,12,删除关键字8之后需重建堆,在此过程中,关键字比较次数(C)

A、1        B、2        C、3        D、4

解析:堆排序——完全二叉树

删除时将最后一个结点补到被删除的结点位置

所以16与10比较,不变;10与12比较,12向下移动;12与16比较,不变,总共比较3次

【2021统考】将关键字6,9,1,5,8,4,7依次插入到初始为空的大根堆H中,得到的H是(B)

A、9,8,7,6,5,4,1       B、9,8,7,5,6,1,4

C、9,8,7,5,6,4,1        D、9,6,7,5,8,4,1

解析:建堆方法:从出现不符合x根堆的结点开始,逐个往下比较,逐个交换。

【2022统考】现有n个数保存在一维数组M中,需要查找M中最小的10个数。请回答下列问题。

1)设计一个完成上述任务的算法,要求平均情况下的比较次数尽可能少,简述算法思想

2)说明算法的时间复杂度和空间复杂度

解析:

1)定义含10个元素的数组A,初始时元素值为该数组类型能表示的最大数MAX。遍历M中的每个元素s,如果s小于A[9],那么s覆盖A[9],再将A中元素重新排序。遍历结束后就得到10个最小的数。

2)O(1)、O(n)

四、归并排序和基数排序

【2017】在内部排序时,若选择了归并排序而未选择插入排序,则可能的理由是(B)

1、归并排序程序代码更短        2、归并排序占用空间更少        3、归并排序的运行效率更高

A、2        B、3        C、1、2        D、1、3

解析:

归并排序需要另开多一个数组空间复杂度为O(n),但时间复杂度比插入排序小O(nlog2n)

所以归并排序效率更高

【2021】设数组s[]={93,946,372,9,146,151,301,485,236,327,43,892},采用最低位优先(LSD)基数排序排列将S排列成升序序列。第一趟分配,收集后,元素372之前、之后紧邻的元素分别是(C)

A、43,892        B、236,301        C、301,892        D、485,301

解析:

0123456789
151、301372、89293、43485946、146、2363279

五、排序算法的比较

【2017】下列排序方法中,若将顺序存储更换为链式存储,则算法的时间效率会降低的是(D)

1、插入排序        2、选择排序        3、冒泡排序        4、希尔排序        5、堆排序

A、仅1、2        B、仅2、3        C、仅3、4        D、仅4、5

希尔排序和堆排序利用了顺序存储的随机访问性,若更换为链式存储,则破坏了随机访问性

【2020】对大部分元素已有序的数组排序时,直接插入排序比简单选择排序效率更高,其原因是(A)

1、直接插入排序过程中元素之间的比较次数更少

2、直接插入排序过程中所需的辅助空间更少

3、直接插入排序过程中元素的移动次数更少

A、仅1        B、仅3        C、仅1、2        D、1、2、3

解析:

简单选择排序的比较次序是固定的,n(n-1)/2次

直接插入排序的在基本有序时比较次数为n-1次

移动次数简单选择排序只需交换无序的位置,而直接插入排序需要移动无序位置后面的所有元素。

【2022】对数据进行排序时,若采用直接插入排序而不采用快速排序,则可能的原因是(D)

1、大部分元素已有序                        2、待排序元素数量很少      

3、要求空间复杂度为O(1)         4、要求排序算法是稳定的

A、仅1、2       B、仅3、4        C、仅1、2、4        D、1、2、3、4

1、快速排序不稳定

2、大部分元素有序并不适合快速排序,快速排序适合对称的序列

3、快速排序需要一个递归工作栈,空间复杂度为O(log2n),而快速排序空间复杂度为O(1)

不稳定算法:选择、希尔、快速、堆排序


1)count = 4、0、5、1、2、3,所以b中保存的-10,10,11,19,25,25

2)1+2+3+4+……+n-1 = n(n-1)/2次 

3)不稳定,将a[i] < a[j]改为,a[i]<=a[j]

六、外部排序

【2013】已知三叉树T中6个叶结点的权分别是2,3,4,5,6,7,T的带权(外部)路径长度最小的是(B)

A、27        B、46        C、54        D、56

6 % (3-1) = 1 需要添加一个虚段,

(2+3)*3+(4+5)*2 +(6+7) = 46

【2019】设外存有120个初始归并段,进行12路归并时,为实现最佳归并需要补充的虚段数是(B)

A、1        B、2        C、3        D、4

解析:只存在度为0和12 的点,n0 = (12-1) x + 1,       n12 = (120 - 1 + x ) / (12-1)

因为n12为整数,所以x = 2

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

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

相关文章

freemarker模板引擎详解以及使用方法

哈喽&#xff01;大家好&#xff0c;我是旷世奇才李先生 文章持续更新&#xff0c;可以微信搜索【小奇JAVA面试】第一时间阅读&#xff0c;回复【资料】更有我为大家准备的福利哟&#xff0c;回复【项目】获取我为大家准备的项目 文章目录 一、freemarker 介绍1、简介 二、free…

Java 基于 SpringBoot 的酒店管理系统,附源码和数据库

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 一、前言介绍二、系统结构三、系统详细实现3.1用户信息管理3.2会员信息管理3.3客房信息管理3.4收藏…

浅析linux异步io框架 io_uring

前言 Linux内核5.1支持了新的异步IO框架iouring&#xff0c;由Block IO大神也即Fio作者Jens Axboe开发&#xff0c;意在提供一套公用的网络和磁盘异步IO&#xff0c;不过io_uring目前在磁盘方面要比网络方面更加成熟。 目录 背景简介 io_uring 系统API liburing 高级特性…

SpringBoot实例类-@Data

1.配置pom.xml 说明&#xff1a;添加lombok依赖 <!-- lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> 2.刷新maven 说明&#xff1a;一般修改xml文件就需要刷…

数据库相关基础知识

第一章 概念 1、数据&#xff1a;描述事物的符号记录称为数据。特点&#xff1a;数据和关于数据的解释不可分。 2、数据库&#xff1a;长期存储在计算机内、有组织、可共享的大量的数据的集合。数据库中的数据按照一定的数据模型组织、描述和存储&#xff0c;具有较小的冗余度、…

Linux —— 信号阻塞

目录 一&#xff0c;信号内核表示 sigset_t sigprocmask sigpending 二&#xff0c;捕捉信号 sigaction 三&#xff0c;可重入函数 四&#xff0c;volatile 五&#xff0c;SIGCHLD 信号常见概念 实际执行信号的处理动作&#xff0c;称为信号递达Delivery&#xff1b;信…

广东智科与涂鸦智能达成合作,引领热泵市场智能转型新风向

全球能源危机正推动热泵市场的增长&#xff0c;据国际能源署报道&#xff0c;2022年全球热泵的销售额增长达11%&#xff0c;欧洲的销售额增长更是达到了40%。中国作为热泵市场的最大出口国&#xff0c;全球热泵市场需求的激增对于中国企业而言无疑是一剂“振奋剂”。 广东智科电…

QT/QTCreator开发/使用技巧

调试模式完整的展示过长的字符串 如图&#xff0c;当字符串过长时在调试模式下&#xff0c;无法非常清晰的看到全部的字符串&#xff0c;此时可以通过 右键菜单→ change value display format→spearate Window。此时字符串将单独显示在一个独立的窗口里。如果你想回到原状勾选…

关于“找不到mfc140u.dll,无法继续执行代码”问题的分析处理方法

我想和大家分享一个在编程过程中经常会遇到的问题——找不到mfc140u.dll,无法继续执行代码。找不到 mfc140u.dll&#xff0c;这个问题可能会让我们感到困扰。mfc140u.dll 是 Microsoft Foundation Classes&#xff08;MFC&#xff09;库的一部分&#xff0c;它是一个 Windows 系…

MySQL——读写分离

简介 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作&#xff08;INSERT、UPDATE、DELETE&#xff09;&#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。一般来说都是通过 主从复制&#xff…

领域驱动设计:领域事件

文章目录 领域事件识别领域事件领域事件相关案例领域事件总体架构 领域事件 领域事件是领域模型中非常重要的一部分&#xff0c;用来表示领域中发生的事件。一个领域事件将导致进一步的业务操作&#xff0c;在实现业务解耦的同时&#xff0c;还有助于形成完整的业务闭环。 举例…

脚本:python实现动态爱心

文章目录 效果代码Reference python实现dynamic heart 效果 代码 import turtle as tu import random as ratu.setup(0.5, 0.5) # 设置画板大小&#xff08;小数表示比例&#xff0c;整数表示大小&#xff09; tu.screensize(1.0, 1.0) # 设置屏幕大小 tu.bgcolor(black) #…

Linux安装logstash

相关链接 项⽬主⻚&#xff1a; https://www.elastic.co/cn/downloads/logstash 下载地址&#xff1a; wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz 官网下载可能比较慢&#xff0c;下面提供下载地址 百度云链接&#xff1a;https://pan.…

C# wpf 实现桌面放大镜

文章目录 前言一、如何实现&#xff1f;1、制作无边框窗口2、Viewbox放大3、截屏显示&#xff08;1&#xff09;、截屏&#xff08;2&#xff09;、转BitmapSource&#xff08;3&#xff09;、显示 4、定时截屏 二、完整代码三、效果预览总结 前言 做桌面截屏功能时需要放大镜…

【关于Java:认识异常】

文章目录 一、1. 异常概念与体系结构1.1 异常的概念1.2 常见的异常1.算数异常2.数组越界异常3.空指针异常 1.3 异常的体系结构1.4 异常的分类1. 编译时异常2. 运行时异常&#xff08;RuntimeException&#xff09; 二、 异常的处理方式2.1 防御式编程2.2 EAFP:&#xff08;异常…

API 架构学习

MQTT架构 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅&#xff08;publish/subscribe&#xff09;模式的“轻量级”通讯协议&#xff0c;该协议构建于TCP/IP协议上&#xff0c;由IBM在…

uni-app运行到微信开发者工具-没有打印的情况

前言 到我们进场使用微信开发者工具时&#xff0c;就会发现它经常会有bug&#xff0c;特别是在软件更新&#xff0c;组件库更新之后 最近在更新微信开发者工具之后发现所有打印都不显示了&#xff0c;虽然是小问题-但对于强迫症很烦 以为是代码配置问题-结果是更新之后打印开…

代码随想录算法训练营第五十八天 | 739. 每日温度,496.下一个更大元素 I

代码随想录算法训练营第五十八天 | 739. 每日温度&#xff0c;496.下一个更大元素 I 739. 每日温度496.下一个更大元素 I 739. 每日温度 题目链接 视频讲解 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answe…

MySQL基础与库的基本操作

目录 1 MySQL基础一种存储解决方案SQL分类查看MySQL存储引擎 2 MySQL 库的操作数据库基本增删认识系统编码校验规则对数据库的影响数据库的查看与删除修改数据库数据库的备份与恢复查看连接情况 1 MySQL基础 一种存储解决方案 mysql本质是一种网络服务 mysql – 数据库服务的…

华为Mate60Pro携麒麟芯片回归,下半年国内手机市场出货量有望提升

本文由群狼调研**&#xff08;长沙产品价格监测&#xff09;**出品&#xff0c;欢迎转载&#xff0c;请注明出处。8月29日中午&#xff0c;华为以“Mate 60 Pro先锋计划”方式让Mate 60 Pro悄然开卖&#xff0c;线上线下用户纷纷前往抢购&#xff0c;据购买到新机的网友网络测速…