数据结构——排序查找算法作业(PTA 第12-13周)大一下

1. 稳定与不稳定:评价一个排序算法是否稳定,是指该算法完成排序的同时,是否会改变序列中
相同元素的相对位置。
稳定算法:冒泡、插入、归并 
不稳定算法:希尔、选择、快速、计数、基数、桶排序

2.对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。
错,基本有序排列次数最少。

3.快速排序的速度在所有排序方法中为最快,而且所需附加空间也最少()   
错,它是基于比较的排序中最快的, 但是有些排序不需要比较, 比如桶排序、基数排序。另外
空间也不是最少, 堆排序就比快排的空间复杂度小

4.要从50个键值中找出最大的3个值,选择排序比堆排序快。
对,选择排序只需要剩下的里面选最大值选3次,堆排序需要排列全部元素

5.对N个记录进行堆排序,需要的额外空间为O(N)。
错,不需要额外的空间。

6.在初始数据表已经有序时,快速排序算法的时间复杂度为O(nlogn )
错,快速排序的时间复杂度和是否有序无关。

7.对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。
错。

8.冒泡排序算法的最坏时间复杂性是O(n 2),而快速排序算法的最坏时间复杂性是O(nlog 2 n),
所以快速排序比冒泡排序效率好。
错,冒泡排序的时间复杂度:最好情况是“O(n)”,最坏情况是“O(n2)”。快速排序的的时间复
杂度:最好情况是“O(nlogn)”,最坏情况是“O(n2)”。

9.下列排序算法中,哪种算法可能出现:在最后一趟开始之前,所有的元素都不在其最终的位置上?(设待排元素个数N>2)

A.冒泡排序

B.插入排序

C.堆排序

D.快速排序

B,举例:插入排序最后一趟前:0 10 20 30 40 50 3
最后一趟中,需要让前面10-50这几个数全部后移一位,此时3不是在其最终的位置,需要移动快速排序是不断划分,记录最后一个元素为pivot,在最后一趟的时候,已经是分到最小的划分范围,且此时所有划分范围都已经是排好序的。堆排序
 

10.以下排序算法中,()不能保证每趟排序至少能将一个关键字放在其最终位置上。
A. 快速排序
B. 希尔排序
C. 堆排序
D. 冒泡排序

B,选项A,快速排序,每趟排序后将当前子序列划分为两部分的那个关键字(“枢轴”)到达了其最终位置。 选项C,堆排序,每趟排序后,当前待排序列中的最大或者最小关键字到达其最终位置。 选项D,冒泡排序,每趟排序后,当前待排序列中的最大或者最小关键字到达其最终位置。 选项B,希尔排序是直接插入排序的改进,每趟排序后不能保证一定有关键字到达最终位置。

11.有组记录的排序码为{46,79,56,38,40,84 },采用快速排序(以位于最左位置的对象为基准而)得到的第一次划分结果为:
A.{38,46,79,56,40,84}
B.{38,79,56,46,40,84}
C.{38,46,56,79,40,84}
D.{40,38,46,56,79,84}

D,原因如下(摘自https://blog.csdn.net/Jessieeeeeee/article/details/107307114

在这里插入图片描述

12.下列排序算法中,时间复杂度不受数据初始状态影响,恒为O(NlogN)的是:
A.冒泡排序
B.直接选择排序
C.堆排序
D.快速排序

C,快排也是NlogN的速度,但是快排最坏的情况下会变成冒泡排序。

13.对N个元素采用简单选择排序,比较次数和移动次数分别为:
A.O(N2), O(N)
B.O(N), O(logN)
C.O(logN), O(N2)
D.O(NlogN), O(NlogN)

A。 

14.在快速排序的一趟划分过程中,当遇到与基准数相等的元素时,如果左指针停止移动,而右指针在同样情况下却不停止移动,那么当所有元素都相等时,算法的时间复杂度是多少?
A.O(logN)
B.O(N)
C.O(NlogN)
D.O(N2)

D,在这里的不停止移动指的是不把这个指针位置的元素放到空的位置上,而是继续左移,所以每个元素都是移动n-i次,放了头上,那么在划分的时候左边的那一块是空的,所以运行次数是等差数列,所以是n的平方。  摘自:数据结构-排序(相关的知识点)_naomne的博客-CSDN博客

 

15.在下列查找的方法中,平均查找长度与结点个数无关的查找方法是:
A.利用二叉搜索树
B.二分法
C.顺序查找
D.利用哈希(散列)表
D,由于散列结构是由事先准备好的散列函数关系与处理冲突的方法来确定数据元素在散列表中的存储位置的,因此散列表查找方法的平均查找长度与元素的个数无关。哈希表查找时间复杂度为O(1)。  摘自:算法与数据结构 第八章 检索(详解)_编程林黛玉的博客-CSDN博客

16.假定有K个关键字互为同义词,若用线性探测法把这K个关键字存入散列表中,至少要进行多少次探测?
A.K-1
B.K
C.K+1
D.K(K+1)/2

D,K(K+1)/2,其实就是1+2+3+4+......+K,每次存入关键字的时候都要探测的,只是如果冲突,再继续探测。(1+2+2+4+4+3)/6=8/3括号里那6个数,从左到右分别是初始关键字序列中的每一个所需查找次数,从左到右。
线性探测就是一旦冲突,向后移动寻找新位置,8占了位置1,15%7=1,但被8占了,所以只能移到2,以后查找15时也需要比较2次,16%7=2,但位置2被15占了,16只能移到位置3;
以后查找需比较2次,22%7=1,但位置1被占了,向后移,位置2,3都被占了,结果最终移到位置4,以后需要比较4次,如此推理,可得结果。

17.设哈希表长为14,哈希函数是H(key)=key%11,表中已有数据的关键字为15,38,61,84共四个,现要将关键字为49的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是(    )
A.8
B.3
C.5
D.9

D,15,38,61,84除11的余数分别为4,5,6,7,没有重复,因此分别就放在这4个下标
49除11的余数为5,发生冲突,因为是二次探测,所以接下来分别探测+1, -1, +4, -4, +9, -9...
显然5 + 1, 5 - 1的位置都有冲突,5 + 4的位置没有冲突,所以为9 
 

18.现有长度为 11 且初始为空的散列表 HT,散列函数是 H(key)=key%7,采用线性探查(线性探测再散列)法解决冲突。将关键字序列 87,40,30,6,11,22,98,20 依次插入到 HT 后,HT 查找失败的平均查找长度是:
A.4
B.5.25
C.6
D.6.29 

C,需要注意的一个是,原本自己写出来的散列表是:3 5 2 6 1 0 10,20和6冲突了,原本是按照±i方的形式做的,但查的时候发现是直接+1向后查找,这里需要注意以下。然后还有这道题的查找失败的平均查找长度要看看概念, 下面的链接里面写的很详细。

答案解析参考:散列表平均查找长度计算题_real_metrix的博客-CSDN博客_现有长度为11且初始为空的散列表ht

19.设有一组关键字 { 29,01, 13,15,56,20,87,27,69,9,10,74 },散列函数为 H(key)=key%17,采用平方探测方法解决冲突。试在 0 到 18 的散列地址空间中对该关键字序列构造散列表,则成功查找的平均查找长度为 __
A.0.33
B.1.17
C.1.25
D.1.33

B,自己写的,不一定正确,回头看看。

错误原思1:写出来的地址是: 11 1 13 15 5 3 2 8 1 9 10 6,发现 69和01有冲突,所以后移查找,查找了3次,所以变为11 1 13 15 5 3 2 8 4 9 10 6,此时计算成功查找的平均查找长度:(11*1+3)/12=1.166666666=1.17

改正:题目是说要平方探测方法,故应该是11 1 13 15 5 3 2 8 1 9 10 6,有冲突,然后1±1,发现地址为0可以,故变为11 1 13 15 5 3 2 8 0 9 10 6,此时是69比较了2次,故计算成功查找的平均查找长度:(11*1+2)/12=1.25

参考:散列表平均查找长度计算题_real_metrix的博客-CSDN博客_现有长度为11且初始为空的散列表ht

20.已知线性表的关键字集合 { 21,11, 13,25,48,6,39,83,30,96,108 },散列函数为 h(key)=key%11,采用分离链接法解决冲突。则成功查找的平均查找长度为 __
A.1.18
B.1.27
C.1.36
D.2.36

B,自己写的,不一定正确。散列中的地址:10 0 2 3 4 6 6 6 8 8 9
加入链表中: 
0->11 
1
2->13
3->25
4->48
5
6->6->39->83
7
8->30->96
9->108
10
成功查找的平均查找长度:(7*1+2*2+3*1)/11=1.2727272727=1.27 

参考:冲突处理方法----分离链接法_-出发-的博客-CSDN博客_分离链接法

21.将关键字序列 { 7,8,30,11,18,9,14 },散列存储到散列列表中,散列表的存储空间是一个下标从 0 开始的一维数组。处理冲突采用线性探测法。散列函数为 h(key)=(key×3)% 表长,要求装入因子为 0.7。则成功查找的平均查找长度为 __
A.1.57
B.1.00
C.1.14
D.1.29

错误原思1:首先散列表大小:7/0.7=10。散列中的地址:2 2 9 3 5 2 4
故需要调整,用线性探测法,变为:2 6 9 3 5 7 4,故成功查找的平均查找长度:(5*1+1*4+1*5)/7=14/7=2.00。

改进:首先散列表大小:7/0.7=10。散列中的地址:1 4 0 3 4 7 2  (注意表长是10,是和10求余,不是除以10!!!!!)
故需要调整,用线性探测法,变为:1 4 0 3 5 7 2,故成功查找的平均查找长度:(6*1+1*2)/7=1.142857=1.14,答案为C。
 

  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值