3.6 排序

在第一趟排序之后,一定能把数据表中最大或最小元素放在其最终位置上的排序算法是( )。
A. 冒泡排序
B. 直接插入排序
C. 快速排序
D. 归并排序

正确答案是 A。
解析
第i趟冒泡排序是从第1个元素到第n-i+1个元素依次比较相邻两个元素的关键字,并在"逆序"时交换相邻元素,其结果是这n-i+1个元素中最大的元素被交换到第n-i+1的位置上。那么第一趟排序之后,就一定能把数据表中最大的元素放在其最终有序位置上。而其他排
序算法均不能实现此要求。
举例说明:要排序数组:int[]arr={6,3,8,2,9,1};
第一趟排序:
第一次排序:6和3比较,6大于3,交换位置:3 6 8 2 9 1
第二次排序:6和8比较,6小于8,不交换位置:3 6 8 2 9 1
第三次排序:8和2比较,8大于2,交换位置:3 6 2 8 9 1
第四次排序:8和9比较,8小于9,不交换位置:3 6 2 8 9 1
第五次排序:9和1比较:9大于1,交换位置:3 6 2 8 1 9
第一趟总共进行了5次比较,排序结果:3 6 2 8 1 9
可以看出第一趟排序之后,9被排列在最终位置。

对于n个关键字进行堆排序,最坏情况下的时间复杂度为( )。
A. O (log2n)
B. O (n)
C. O (nlog2n)
D. O (n2)

正确答案是 C。
解析
任何情况下堆排序的时间复杂度O(nlog2n)

单选题
以下不稳定的排序算法是( )。
A. 冒泡排序
B. 直接插入排序
C. 希尔排序
D. 归并排序

正确答案是 C。
解析
排序算法的稳定性如下表所示:
在这里插入图片描述

用插入排序和归并排序算法对数组<3,1,4,1,5,9,6,5>进行从小到大排序,则分别需要进行( )次数组元素之间的比较。
A. 12, 14
B. 10, 14
C. 12, 16
D. 10, 16

正确答案是 A。
解析
本题考查排序算法。
插入排序算法的基本思想是将待排序数组分为两个部分,已排好序部分和未排序部分。其主要步骤为:开始时,第一个元素在已排好序部分中,其余元素在未排序部分。然后依次从未排序部分中取出第一个元素,从后向前与排好序部分的元素进行比较并将其插入到已排好序部分的正确位置。直到所有元素排好序。
归并排序的基本思想是将待排序数组划分为子问题,对子问题求解,然后合并解。其主要步骤为:将数组分为两个相同规模的子数组,分别包含前n/2个元素和后n/2个元素;递归地排序这两个子数组;合并排好序的两个子数组,依次比较两个排好序的子数组的元素,得到整个数组的排好序的序列。
根据上述算法思想和算法步骤,可以得到题中实例的比较次数分别为12和14。

对一组数据2,12,16,88,5,10进行排序,如果前3趟排
序结果如下:
第一趟排序结果:2,12,16,5,10,88
第二趟排序结果:2,12,5,10,16,88
第三趟排序结果:2,5,10,12,16,88
则采用的排序算法可能是( )。
A. 冒泡排序
B. 希尔排序
C. 归并排序
D. 基数排序

正确答案是 A。
解析
分别用其他3中排序算法执行数据,归并排序的第一趟排序后的结果是2,12,16,88,5,10。基数排序第一趟后的结果是10,2,12,5,16,88。希尔排序显然不符合,只有冒泡排序符合。

对一组数据进行排序,要求排序算法的时间复杂度为O(nlgn),且要求排序是稳定的,则可采用(1)。若要求排序算法的时间复杂度为O(nlgn),且在原数据上进行,即空间复杂度为0(1),则可采用(2)算法。
题目(1)
A. 直接插入排序
B. 堆排序
C. 快速排序
D. 归并排序
题目(2)
A. 直接插入排序
B. 堆排序
C. 快速排序
D. 归并排序

正确答案是D B。
解析
各个内排序算法的时间复杂度、空间复杂度、稳定性如下表所示。
在这里插入图片描述

下列算法中,( )算法可能出现下列情况:在最后一趟开始之前,所有元素都不在最终位置上。
A. 堆排序
B. 冒泡排序
C. 直接插入排序
D. 快速排序

正确答案是 C。
解析
在直接插入排序中,若待排序中的最后一个元素插入表的第一个位置,则前面的有序子序列中的所有元素都不在最终位置上。

为实现快速排序算法,待排序列适合采用( )。
A. 顺序存储
B. 链式存储
C. 散列存储
D. 索引存储

正确答案是 A。
解析
这道题当成一个常识题。大多数内部排序算法都只适用于顺序存储。

将数组{1,1,2,4,7,5}从小到大排序,若采用(1)排序算法,则元素之间需要进行的比较次数最少,共需要进行(2)次元素之间的比较。
题目(1)
A. 直接插入
B. 归并
C. 堆
D. 快速
题目(2)
A. 5
B. 6
C. 7
D. 8

正确答案是 A B。
解析
直接插入排序算法是:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。第1趟比较前两个数,然后把第2个数按大小插入到有序表中;第2趟把第3个数据与前两个数从前向后扫描,把第3个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。
直接插入排序属于稳定的排序,最坏时间复杂性为(n2),空间复杂度为0(1)。
依题意,将数组{1,1,2,4,7,5}从小到大排序,若采用直接插入排序算法,则元素之间需要进行的比较次数最少,共需要进行6次元素之间的比较。

对一待排序序列分别进行直接插入排序和简单选择排序,若待排序序列中有两个元素的值相同,则( )保证这两个元素在排序前后的相对位置不变。
A. 直接插入排序和简单选择排序都可以
B. 直接插入排序和简单选择排序都不能
C. 只有直接插入排序可以
D. 只有简单选择排序可以

正确答案是 C。
解析
直接插入排序是稳定的排序算法,选择排序是不稳定的排序算法。

在某应用中,需要先排序一组大规模的记录,其关键字为整数。若这组记录的关键字基本上有序,则适宜采用(1)排序算法。若这组记录的关键字的取值均在0到9之间(含),则适宜采用(2)排序算法。
题目(1)
A. 插入
B. 归并
C. 快速
D. 计数
题目(2)
A. 插入
B. 归并
C. 快速
D. 计数

正确答案是 D。
解析
插入排序中的希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。所以当数列基本有序时,采用插入排序算法是比较合适的。
计数排序是一个非基于比较的排序算法,该算法于1954年由Harold H.Seward提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为O(n+k)(其中k是整数的范围),快于任何比较排序算法。

排序算法的稳定性是指将待排序列排序后,能确保排序码中的相对位置保持不变。( )是稳定的排序算法。
A. 冒泡排序
B. 快速排序
C. 堆排序
D. 简单选择排序

正确答案是 A。
解析
本题考查常见算法的应用。
将待排序列排序后,能确保排序码中的相对位置保持不变指的是稳定性排序,本题中只有冒泡排序是稳定的排序,快速排序、堆排序、简单选择排序都是不稳定排序。本题选择A选项。

堆排序是一种(1)排序,m个元素进行堆排序时,其时间复杂性为(2)。
题目(1)
A. 归并
B. 交换
C. 选择
D. 插入
题目(2)
A. O(m)
B. O(m2)
C. O(log2m)
D. O(mlog2m)

正确答案是 C D。
解析
堆排序是利用堆这一特殊的树形结构进行的选择排序,它有效地改进了直接选择排序,提高了算法的效率。堆排序的整个过程是:构造初始堆,将堆的根节点和最后一个节点交换,重新调整成堆,再交换,再调整,直到完成排序。其时间复杂度是O(nlog2n)。

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

正确答案是 A。
解析
归并排序需要n个空间,
快速排序需要Ign个空间,
堆排序需要1个空间,
冒泡排序需要1个空间。
所以选A。

n个关键码构成的序列{k1,k2,….Kn}当且仅当满足下列关系时称其为堆。
在这里插入图片描述

以下关键码序列中,( )不是堆。
A. 15,25,21,53,73, 65,33
B. 15,25,21,33,73,65,53
C. 73,65,25,21,15,53,33
D. 73,65,25,33,53,15,21

正确答案是 C。
解析
本题考查堆排序的算法问题。
堆分为大顶堆(根节点大于左孩子和右孩子节点)和小顶堆(根节点小于左孩子节点和右孩子节点)。
根据选项来看,共7个节点,应该是3层的满二叉树,符号堆的有A,B,D三个选项。
仅有C选项73,65,25,21,15,53,33,73作为根节点,根大于其左孩子节点65和右孩子节点25,是大顶堆的构造,第二层65作为左子树的根节点,大于其左孩子节点21和右孩子节点15,符合大顶堆的构造;25作为右子树的根节点,却小于其左孩子节点53和右孩子节点33,不符合大顶堆的构造了,故其不是堆。
综上所述,本题选C。

对于一个初始无序的关键字序列,在下面的排序方法中,( )第一趟排序结束后,一定能将序列中的某个元素在最终有序序列中的位置确定下来。
①直接插入排序②冒泡排序③简单选择排序④堆排序⑤快速排序⑥归并排序
A. ①②③⑥
B. ①②③⑤⑥
C. ②③④⑤
D. ③④⑤⑥

正确答案是 C。
解析
本题考查的是排序算法类型。
直接插入排序:是在有序序列中插入一个元素后,保持序列有序。排序时在插入最后一个元素之前,若待插入的元素小于有序序列的所有元素,则有序序列的所有元素需后移,因此,在第一趟排序结束后,不能保证将序列中的某个元素在最终有序序列中的位置确定下来。①不满足要求选择类排序:每一轮会选择最值(最大值或最小值)与第一个位置进行交换,此时确定第一个元素位置。③④都满足要求。
冒泡排序:每一轮会让最值相邻交换直至放到最终的位置,②满足要求。
快速排序:每一轮会根据基准元素划分左右数组,此时基准元素的位置可以确定,因此⑤也满足要求。
归并排序:以二路归并排序为例,是将两个有序子序列合并为一个有序序列,第一趟处理的对象是若干个有序子序列,归并后子序列个数会少一半,但是还不能确定任何一个元素在最终序列中的位置。⑥不满足要求。
因此只有②③④⑤满足要求,所以本题选择C选项。

对数组A=(2,8,7,1,3,5,6,4)构建大顶堆为( )(用数组表示)。
A. (1,2,3,4,5,6,7,8)
B. (1,2,5,4,3,7,6,8)
C. (8,4,7,2,3,5,6,1)
D. (8,7,6,5,4,3,2,1)

正确答案是 C。
解析
本题考查的是堆排序算法。
A数组初始构造如下:
在这里插入图片描述
从最底层依次调整不符位置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时满足大顶堆,此时序列记为:8、4、7、2、3、5、6、1。
本题选择C选项。

"单选题
采用简单选择排序算法对序列(49,38,65,97,76,13,27,49)进行非降序排序,两趟后的序列为( )。
A. (13,27,65,97,76,49,38,49)
B. (38,49,65,76,13,27,49,97)
C. (13,38, 65,97,76,49,27,49)
D. (38,49,65,13, 27,49,76,97)

正确答案是 A。
解析
本题考查选择排序类算法。
工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
采用非降序(即升序排列)
第一趟排序,找到最小的数据13,将其与第一位数交换位置,故整体情况为:
(13, 38,65,97,76,49,27,49)
第二趟排序,找到第二小的数据27,将其与第二位数交换位,故整体情况为:
(13,27,65,97,76,49,38,49)

在29个元素构成的查找表中查找任意一个元素时,可保证最多与表中5个元素进行比较即可确定查找结果,则采用的查找表及查找方法是( )。
A. 二叉排序树上的查找
B. 顺序表上的顺序查找
C. 有序顺序表上的二分查找
D. 散列表上的哈希查找

正确答案是 C。
解析
本题考查查找算法相关内容。
二叉排序树上的查找:在二叉排序树上查找一个元素时,平均查找长度通常与树的深度有关。然而,题目没有给出二叉排序树的具体结构,所以我们不能确定它的深度是否满足“最多与5个元素进行比较”的条件。此外,对于最坏情况(即树非常不平衡),比较的次数可能会远超过5次。因此,A选项不能确定。顺序表上的查找:会从头到尾(或从尾到头)遍历整个列表,直到找到目标元素或遍历完整个列表。对于29个元素的列表,顺序查找最多需要比较29次。因此,B选项显然不满足“最多与5个元素进行比较”的条件。
二分查找:每次比较都会排除一半的元素。对于一个包含29个元素的有序顺序表,二分查找的决策树深度为「log2(29)」= 5(向上取整)。这意味着在最坏的情况下,二分查找需要进行5次比较来确定查找结果。因此,C选项满足题目要求。
散列表的哈希查找:哈希查找的性能主要取决于哈希函数的设计以及哈希表的填充因子。理想情况下,哈希查找可以在常数时间内完成,但最坏情况下可能会退化为线性查找(如果哈希函数设计不当或哈希表过于拥挤)。题目没有提供关于哈希函数或哈希表的具体信息,因此我们不能确定哈希查找是否满足“最多与5个元素进行比较”的条件。

对数组A=(2,8,7,1,3,5,6,4)用快速排序算法的划分方法进行一趟划分后得到的数组A为(1)(非递减排序,以最后一个元素为基准元素)。进行一趟划分的计算时间为(2)。
题目(1)
A. (1,2,8,7,3,5,6,4)
B. (1,2,3,4,8,7,5,6)
C. (2,3,1,4,7,5,6,8)
D. (2,1,3,4,8,7,5,6)
题目(2)
A. O(1)
B. O(lgn)
C. O(n)
D. O(nlgn)

正确答案是 C C。
解析
解析1
本题考查的是排序算法。
本题根据快速排序的过程,首先选定基准元素为最后一个元素(题干给出的要求),下面进行排序过程:
(1)基准元素4与另一端待排第一个元素2进行比较,满足非递减,不需要交换;
(2)基准元素4与另一端待排第一个元素8进行比较,不满足非递减,交换位置,此时序列为(2,4,7,1,3, 5, 6, 8);
(3)基准元素4与另一端待排第一个元素6进行比较,满足非递减,不需要交换;
(4)基准元素4与另一端待排第一个元素5进行比较,满足非递减,不需要交换;
(5)基准元素4与另一端待排第一个元素3进行比较,不满足非递减,交换位置,此时序列为(2,3,7,1, 4, 5, 6, 8) ;
(6)基准元素4与另一端待排第一个元素7进行比较,不满足非递减,交换位置,此时序列为(2,3,4,1,7, 5, 6, 8);
(7)基准元素4与另一端待排第一个元素1进行比较,不满足非递减,交换位置,此时序列为(2,3,1,4,7,5,6,8)。
综上,本题第一空选择C选项。
解析2
因为一趟划分的过程会与整个序列n个元素进行比较,因此一趟划分的时间复杂度为O(n),第二空选择C选项。

对n个数排序,最坏情况下时间复杂度最低的算法是( )排序算法。
A. 插入
B. 冒泡
C. 归并
D. 快速

正确答案是 C。
解析
本题考查排序算法相关知识。
其他选项在最坏情况下的时间复杂度都是O(n2),只有C选项归并排序,在最坏情况下,时间复杂度仍然是O(nlog2n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yoyo勰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值