数据结构与算法——每日一练(5月)

文章目录

  • 每日一练
    • 5.1
    • 5.2
    • 5.3
    • 5.4
    • 5.5
    • 5.6
    • 5.7
    • 5.8
    • 5.9
    • 5.10
    • 5.11
    • 5.12
    • 5.13
    • 5.14
    • 5.15
    • 5.16
    • 5.17
    • 5.18
    • 5.19
    • 5.20
    • 5.21
    • 5.22
    • 5.23
    • 5.24
    • 5.25
    • 5.26
    • 5.27
    • 5.28
    • 5.29
    • 5.30
    • 5.31

每日一练

5.1

  • 下面的程序打印输出的分别是( )?
public class Main {
   
   
    public static void main(String[] args) {
   
   
        Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
        System.out.println(f1 == f2);
        System.out.println(f3 == f4);
    }
}

A. true true

B. true false

C. false true

D. false false

【答案】B

【解析】如果整型字面量的值在-128到127之间,那么不会new新的Integer对象, 而是直接引用常量池中的Integer对象,所以上面题中f1,f2的结果是true,而f3,f4的结果是false。

5.2

  • 这条语句String s="a”+“b”+“c”+“d”一共创建了多少个对象?

A. 1

B. 2

C. 6

D. 7

【答案】A

【解析】赋值符号右边的"a"、“b”、“c”、“d"都是常量,对于常量, 编译时就直接存储它们的字面值而不是它们的引用,在编译时就直接将它们连接的结果提取出来变成了"abcd” 该语句在class文件中就相当于String s = “abcd”。

5.3

  • (堆结构复习题) 下列4个序列中,()是堆。

A. {75, 60, 30, 15, 25, 45, 20, 10}

B. {75, 65, 45, 10, 30, 25, 20, 15}

C. {75, 45, 65, 30, 15, 25, 20, 10}

D. {75, 45, 65, 10, 25, 30, 20, 15}

【答案】C

【解析】画出每个堆结构对应的树即可得到答案。选项A中存在边30-45不满足性质,选项B中存在边10-15不满足性质,选项D中存在边10-15不满足性质。因此选C。

5.4

  • (排序预习题) 下列排序算法中,()是稳定的。 ① 插入排序 ② 快速排序 ③ 堆排序 ④ 归并排序

A. ①和②

B. ②和③

C. ③和④

D. ①和④

【答案】D

5.5

  • (排序预习题) 对一组关键字{84, 47, 25, 15, 21}排序,关键字的排列次序在排序过程中的变化为: ① {84, 47, 25, 15, 21} ② {15, 47, 25, 84, 21} ③ {15, 21, 25, 84, 47} ④ {15, 21, 25, 47, 84} 则采用的排序可能是()。

A. 简单选择排序

B. 堆排序

C. 快速排序

D. 直接插入排序

【答案】A

5.6

  • (排序预习题) 以下排序算法中,()不能保证每趟排序至少能将一个关键字放在其最终位置上。

A. 快速排序

B. 希尔排序

C. 堆排序

D. 冒泡排序

【答案】B

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

5.7

  • (排序预习题) 若关键字序列{11, 12, 13, 7, 8, 9, 23, 4, 5}是采取下列排序算法之一得到的第二趟排序后的结果,则该排序算法只能是()

A. 冒泡排序

B. 插入排序

C. 选择排序

D. 归并排序

【答案】B

【解析】若是冒泡排序或者选择排序,则第二趟后应有两个最大或者最小的关键字正确排列,而结果不符。二路归并排序第二趟后,应形成两个长度为4的有序子序列,结果也不符合。所以答案只能是插入排序。两次插入后,前3个数字的顺序是对的。

5.8

  • 从以下哪一个选项中可以获得Servlet的初始化参数。

A. Servlet

B. ServletContext

C. ServletConfig

D. GenericServlet

【答案】C

【解析】servlet的生命周期的方法中有一个init方法, 其中一个重载的init方法的参数为ServletConfig可以获取初始化参数。

5.9

  • 下列哪个为JSP的内置对象。

A. env

B. page

C. jspinfo

D. context

【答案】B

【解析】JSP有九个内置对象:① request:保存了很多客户端请求的信息;② response:生成服务器端响应,然后将响应结果发送到客户端;③ out:表示输出流,此输出流将作为请求发送到客户端;④ session:我们写的对象放在这个session对象中,这个对象就在我们的会话中都存在;⑤ application:我们写的对象放在这个application对象中,这个对象就在整个应用程序中都存在;⑥ pageContext:相当于当前页面的容器,可以访问当前页面的所有对象;⑦ page:一般我们使用 page 来替代使用这个对象;⑧ exception:用来处理异常的;⑨ config:一般在页面中是使用很少的,一般会在Servlet中使用这个。

5.10

  • 在下列算法中,()算法可能出现下列情况:在最后一趟开始之前,所有元素都不在最终位置上。

A. 堆排序

B. 冒泡排序

C. 直接插入排序

D. 快速排序

【答案】C

【解析】在直接插入排序中,若待排序列中的最后一个元素应插入到表中的第一个位置,则前面的有序子序列中的所有元素都不在最终位置上。

5.11

  • 对n个不同的元素利用冒泡排序从小到大排序,在()情况下元素交换的次数最多

A. 从大到小排序好的

B. 从小到大排序好的

C. 元素无序

D. 元素基本有序

【答案】A

【解析】通常情况下,冒泡排序最少进行1次冒泡,最多进行n-1次冒泡。初始序列为逆序时,需进行n-1次冒泡,并且需要交换的次数最多。初始序列为正序时,进行1次冒泡(无交换)就可以终止算法。

5.12

  • 下列选项中,不可能是快速排序第2趟排序结果的是()。

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

【答案】C

【解析】快排的阶段性排序结果的特点是,第i趟完成时,会有i个以上的数出现在它最终将要出现的位置,即它左边的数都比它小,它右边的数都比它大。 题目问第二趟排序的结果,即要找不存在两个这样的数的选项。 A选项中2,3,6,7,9均符合,所以A排除; B选项中,2,9均符合,所以B排除; D选项中5,9均符合,所以D排除; 最后看C选项,只有9一个数符合,所以C不可能是快速排序第二趟的结果。

5.13

  • 对下列关键字序列用快排进行排序时(每次取待排序的子表的第一个元素作为枢轴),速度最快的情形是()

A. {21, 25, 5, 17, 9, 23, 30}

B. {25, 23, 30, 17, 21, 5, 9}

C. {21, 9, 17, 30, 25, 23, 5}

D. {5, 9, 17, 21, 23, 25, 30}

【答案】A

【解析】当每次的枢轴都把表等分为长度相近的两个子表时,速度是最快的;当表本身已经有序或逆序时,速度最慢。选项D中的序列已按关键字排好序,因此它是最慢的,而A中第一趟枢轴值21将表划分为两个子表{9,17,5}和(25,23,30},而后对两个子表划分时,枢轴值再次将它们等分,所以该序列是快速排序最优的情况,速度最快。

5.14

  • <

你可能感兴趣的:(数据结构与算法,快速排序,归并排序,二分查找)