数据结构题目收录(二十五)

1、排序趟数与序列的原始状态无关的排序方法是()。

Ⅰ、直接插入排序
Ⅱ、简单选择排序
Ⅲ、冒泡排序
Ⅳ、基数排序

  • A:Ⅰ、Ⅲ
  • B:Ⅰ、Ⅱ、Ⅳ
  • C:Ⅰ、Ⅱ、Ⅲ
  • D:Ⅰ、Ⅳ
解析

交换类的排序,其趟数和原始序列状态有关,故冒泡排序与初始序列有关。

  • 直接插入排序:每趟排序都插入一个元素,所以排序趟数固定为n-1躺;
  • 简单选择排序:每趟排序都选出一个最小(或最大)的元素,所以排序趟数固定为n-1;
  • 技术排序:每趟排序都要进行“分配”和“收集”,排序趟数固定为d。
答案:B

2、若序列的原始状态为{1,2,3,4,5,10,6,7,8,9},要想使得排序过程中的元素比较次数最少,则应该采用()方法。

  • A:插入排序
  • B:选择排序
  • C:希尔排序
  • D:冒泡排序
解析

选择排序和序列初态无关,直接排除。

初始序列基本有序时,插入排序比较次数较少。本题中,插入排序仅需比较n+4次,而希尔排序和冒泡排序的比较次数均远大于此。

答案:A

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

Ⅰ、插入排序
Ⅱ、选择排序
Ⅲ、起泡排序
Ⅳ、希尔排序
Ⅴ、堆排序

  • A:仅Ⅰ、Ⅱ
  • B:仅Ⅱ、Ⅲ
  • C:仅Ⅲ、Ⅳ
  • D:仅Ⅳ、Ⅴ
解析

插入排序、选择排序、起泡排序的原本时间复杂度是O( n 2 n^2 n2),更换为链式存储后的时间复杂度还是o( n 2 n^2 n2)。希尔排序和堆排序都利用了顺序存储的随机访问特性,而链式存储不支持这种性质,所以时间复杂度会增加,因此选D。

答案:D

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

Ⅰ、直接插入排序过程中元素之间的比较次数更少
Ⅱ、直接插入排序过程中所需的辅助空间更少
Ⅲ、直接插入排序过程中元素的移动次数更少

  • A:仅Ⅰ
  • B:仅Ⅲ
  • C:仅Ⅰ、Ⅱ
  • D:Ⅰ、Ⅱ和Ⅲ
解析

考虑较极端的情况,对于有序数组,直接插入排序的比较次数为n-1,简单选择排序的比较次数始终为1+2+…+n-1=n(n-1)/2,Ⅰ正确。

两种排序方法的辅助空间都是O(1),无差别,Ⅱ错误。

初始有序时,移动次数均为0;对于通常情况,直接插入排序每趟插入都需要依次向后挪位,而简单选择排序只需与找到的最小元素交换位置,后者的移动次数少很多,Ⅲ错误。

答案:A

5、设在磁盘上存放有375000个记录,做5路平衡归并排序,内存工作区能容纳600个记录,为把所有记录排好序,需要做()趟归并排序。

  • A:3
  • B:4
  • C:5
  • D:6
解析

初始归并段的个数r=375000/600=625,因此,归并趟数S= ⌈ log ⁡ m r ⌉ \lceil {\log_mr} \rceil logmr= ⌈ log ⁡ 5 625 ⌉ \lceil {\log_5{625}} \rceil log5625=4。

第一趟把625个归并段归并成625/5=125个;

第二趟把125个归并段归并成125/5=25个;

第三趟把25个归并段归并成15/5=5个;

第四趟把5个归并段归并成5/5=1个。

答案:B

6、设有5个初始归并段,每个归并段有20个记录,采用5路平衡归并排序,若不采用败者树,使用传统的顺序选出最小记录(简单选择排序)的方法,总的比较次数为(①);若采用败者树最小的方法,总的比较次数约为(②)。

  • A:20
  • B:300
  • C:396
  • D:500
解析

不采用败者树时,在5个记录中选出最小的需要做4次比较,共有100个记录,需要做99次选择最小记录的操作,所以需要的比较次数为4 × \times × 99=396,故选C。

采用败者树时,5路归并意味着败者树的外结点有5个,败者树的高度h= ⌈ log ⁡ 2 5 ⌉ \lceil {\log_2{5}} \rceil log25=3。每次在参加比较的记录中选择一个关键字最小的记录,比较次数不超过h,共100个记录,需要的比较次数不超过100 × \times × 3 =300,故选B。

答案:C,B

7、置换-选择排序的作用是()。

  • A:用于生成外部排序的初始归并段
  • B:完成将一个磁盘文件排序成有序文件的有效的外部排序算法
  • C:生成的初始归并段的长度是内存工作区的2倍
  • D:对外部排序中输入、归并、输出的并行处理
解析

置换-选择排序是外部排序中生成初始归并段的方法,用此方法得到的初始归并段的长度是不等长的,其长度平均是传统等长初始归并段的2倍,从而使得初始归并段数减少到原来的近二分之一。但是,置换-选择排序不是一种完整的生成有序文件的外部排序算法。

答案:A

8、在做m路平衡归并排序的过程中,为实现输入/内部归并/输出的并行处理,需要设置(①)个输入缓冲区和(②)个输出缓冲区。

  • A:2

  • B:m

  • C:2m-1

  • D:2m

  • A:2

  • B:m

  • C:2m-1

  • D:2m

解析

在做m路平衡归并排序的过程中,为实现输入/内部归并/输出的并行处理,需要设置2m个输入缓冲区和2个输出缓冲区,以便在执行内部归并时,能同时进行输入/输出操作。若仅设置m个输入缓冲区,则仅能进行串行操作,无法并行处理。

答案:D,A

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

  • A:27
  • B:46
  • C:54
  • D:56
解析

将哈夫曼树的思路推广到三叉树的情形。

为了构成严格的三叉树,需添加权为0的虚叶结点,对于严格的三叉树,( n 0 n_0 n0-1)%(3-1)=u=1 ≠ \ne = 0,需要添加m-u-1=3-1-1=1个叶结点,说明7个叶结点刚好可以构成一棵严格的三叉树。按照哈夫曼树的原则,权为0的叶结点应离树根最远,构造的最小带权生成树如下图所示。

请添加图片描述

最下带权路径长度为(2+3) × \times × 3+(4+5) × \times × 2+(6+7) × \times × 1=46。

答案:B

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

  • A:1
  • B:2
  • C:3
  • D:4
解析

在12路归并树中只存在度为0和度为12的结点,设度为0的结点数、度为12的结点数和要补充的结点数分别为 n 0 n_0 n0 n 1 2 n_12 n12 n 补 n_补 n,则有 n 0 n_0 n0=120+ n 补 n_补 n n 0 n_0 n0=(12-1) n 1 2 n_12 n12+1,可得 n 1 2 n_12 n12=(120-1+ n 补 n_补 n)/(12-1)。

由于结点数 n 1 2 n_12 n12为整数,所以 n 补 n_补 n是使上式整除的最小整数,求得 n 补 n_补 n=2,所以答案选B。

答案:B
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
数据结构是计算机科学中非常重要的一个领域,它研究的是如何组织和存储数据,以便能够高效地访问和操作数据。在数据结构中,有一些经典的题目被广泛应用于面试和算法竞赛中,这些题目可以帮助我们理解和掌握不同的数据结构及其应用。 以下是一些常见的数据结构题目及其精华: 1. 数组反转:给定一个数组,要求将数组中的元素反转。可以通过双指针法来实现,一个指针指向数组的起始位置,另一个指针指向数组的末尾位置,然后交换两个指针所指向的元素,并向中间移动指针,直到两个指针相遇。 2. 链表反转:给定一个单链表,要求将链表中的节点反转。可以通过迭代或递归的方式来实现。迭代方式可以使用三个指针分别指向当前节点、前一个节点和后一个节点,然后依次修改节点的指针方向。递归方式可以先递归反转后面的节点,然后修改当前节点的指针方向。 3. 栈的应用:栈是一种后进先出(LIFO)的数据结构,常用于处理括号匹配、表达式求值等问题。例如,可以使用栈来判断一个字符串中的括号是否匹配,遍历字符串,遇到左括号则入栈,遇到右括号则出栈并判断是否匹配。 4. 队列的应用:队列是一种先进先出(FIFO)的数据结构,常用于处理广度优先搜索、任务调度等问题。例如,可以使用队列来实现广度优先搜索算法,将起始节点入队,然后循环从队列中取出节点并将其邻居节点入队,直到队列为空。 5. 二叉树的遍历:二叉树是一种常见的数据结构,常用于表示树形结构的问题。二叉树的遍历有三种方式:前序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根)。可以使用递归或迭代的方式来实现二叉树的遍历。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员丶星霖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值