2.26排序专项测试复盘

  • 输入若已经是排好序的,下列排序算法最快的是()
    A. 插入排序
    B. Shell排序
    C. 合并排序
    D. 快速排序

    解析:若已排好序,使用插入排序的时候只要两两比较一次即可,复杂度为O(n)。
    答案:A

  • 拓扑排序是按 AOE 网中每个结点事件的最早发生时间对结点进行排序,这样的说法正确吗?
    A. 正确
    B. 不正确

    解析:AOE网是一个有向无环图,求其拓扑排序有两种方法:1,对图进行深度优先搜索后,按节点完成时间逆序排成一列即得到拓扑排序,寻找入度为0的节点,输出,并删除从该节点出发的所有边重复还过程,即得到图的拓扑排序。 需注意:图的拓扑排序并不唯一。
    答案:B

  • 若外部存储上有3110400个记录,做6路平衡归并排序,计算机内存工作区能容纳400个记录,则排序好所有记录,需要作几趟归并排序( )
    A. 6
    B. 3
    C. 5
    D. 4

    解析:log(6,3110400/400) = 5 设归并趟数为s次,对n个记录进行排序,有m个归并段,要进行k路归并排序,则归并趟数s=log(k,m);
    答案:C

  • 交换排序法是对序列中的元素进行一系列比较,当被比较的两个元素逆序时,进行交换,起泡排序和快速排序是基于这类方法的两种排序方法,起泡排序算法的最坏时间复杂性是O(n*n),而快速排序算法的最坏时间复杂性是O(nlog2 n);所以快速排序比起泡排序效率更高(×)

  • 所有内部排序方法都是基于关键字比较的排序方法。( × )

  • 某地电信局要对业务号码进行梳理,需要检测开通的市话号码是否存在某一个是另一个的前缀的情况,以简化电话交换机的逻辑。例如:某用户号码是“11001100”,但与"110"报警电话产生前缀配对。已知市话号码最长8位,最短3位,并且所有3位的电话号码都以1开头。由于市话号码众多,长度也未必一直,高效的算法可以用O(n)的时间复杂度完成检测(n为开通市话号码个数,数量是千万级的)。那么,该算法最坏情况下需要耗费大约________内存空间。
    A. 5GB
    B. 500MB
    C. 50MB
    D. 5MB

    解析:最长 8 位, 最短 3 共6种情况:
    三位都是 1 开头 ,因此有 10^2=100 种
    四位: 10^4=10,000 种
    五位: 10^5=100,000 种
    六位: 10^6=1,000,000 种
    七位: 10^7=10,000,000 种
    八位: 10^8=100,000,000种
    相加一共为111,110,100种,因为电话号码唯一,所有号码最后1位不用判断,总数除以10 = 11,111,010种
    一位号码 4bit(号码 从 0-9 ,所以至少用 4 个 bit 位才能表示 ),8位的号码占 32bit 即 4字节/byte(其实可以只存前7位,3.5byte)
    最后:11,111,010 * 4 / 1024 / 1024 = 42.4 Mb

    答案:C

  • 在以下排序算法中,关键字比较的次数与记录的初始排列次序无关的是()。
    A. 希尔排序
    B. 冒泡排序
    C. 插入排序
    D. 直接选择排序

    **解析:选择排序每次都需要遍历剩下的序列 找出最大或最小值进行与当前位置的交换 无论什么情况下时间复杂度都为O(N2) **
    答案:D

  • 拓扑排序运算只能用于( 有向无环图

  • 在外部排序时,利用选择树方法在能容纳m个记录的内存缓冲区中产生的初始归并段的平均长度为2m个记录

  • 待排序元素规模较小时,宜选取哪种排序算法效率最高( )
    A. 堆排序
    B. 归并排序
    C. 冒泡排序
    D. 希尔排序

    解析:递归时间可能长于比较时间
    答案:C

  • 适合并行处理的排序算法是()
    A. 选择排序
    B. 快速排序
    C. 希尔排序
    D. 基数排序

    解析:基数排序:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次
    排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。可以同时操作多个元素,从而实现了并行处理。

    答案:D

posted @ 2020-02-26 23:36  19呀  阅读(790)  评论(0编辑  收藏  举报