zoukankan      html  css  js  c++  java
  • 数据结构笔试题(单选)

    1.一个从大到小的数组,按从小到大的顺序排序,哪种排序方法最快?(最坏情况)

    (1)冒泡排序:1+2+...n-1=O(n^2);

    (2)快速排序:每次partion都需要比较k-1次,才能将“第一个”数字移动到“末端”。需要进行n-1次partion才能完成排序。所以最坏情况下比较次数仍然是1+2+..+n-1=O(n^2);

    (3)插入排序:2+3+...+n=O(n^2);

    (4)堆排序:O(nlogn)。

    补充:平均情况下,这几种排序算法的比较:

    (1)快速排序:平均时间复杂度为O(nlogn);最坏时间复杂度O(N^2);快速排序需要一个栈作辅助空间,用来实现递归处理左、右子文件,在最坏情况下,递归深度为n,所需栈的空间大小为O(n)数量级;不稳定的排序方法。

    (2)冒泡排序:最坏时间复杂度O(N^2);最好时间复杂度为n-1;少量辅助空间O(1);稳定的排序方法。

    (3)插入排序:平均复杂度为O(N^2);最坏情况=(n-1)(n+2)/2 (次);少量中间变量,为常量级O(1);稳定的排序方法。

    (4)堆排序:平均复杂度及最坏情况的复杂度都是O(nlogn);适用于大数据量的排序。

    2.关于循环队列说法正确的是:D

    A.循环队列不是线性结构;

    B.仅用头指针就可以描述循环序列中元素的变化过程;

    C.仅用尾指针就可以描述循环序列中元素的变化过程;

    D.循环队列中元素的个数是有队头指针和队尾指针共同决定。

    解析:队列长度=(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;

           Q.rear=Q.front时可能为空队列,也可能为满队列;解决办法:少用一个元素空间,以队列头指针在队列尾指针的下一位置(环状的下一位置)上作为满状态标志。

    3.设一棵二叉树中有3个叶子节点,有8个度为1的节点,则该二叉树中总的节点数为?   3+2+8=13

    解析:度为1的结点数8+度为0的结点数2+度为2的结点数(3-1)=13;

    4.在一个元素个数为N的数组里,找到升序排在N/5位置的元素的最优算法时间复杂度是  O(n)

    解析:找到一个长度为n的数组中第k大的数的最优化时间复杂度为O(n)。

    将长度为k的数组进行partition,要比较的次数为k。在长度为n的数组中查找第k大的数字,最坏情况下要进行n-k次partition,复杂度为n+n-1+n-2+...+n-k=kn+k(k+1)/2=O(n)。

  • 相关阅读:
    Sql语句中IN和exists的区别及应用
    时间戳/Date(1354116249000)/ 转换
    SqlServer不允许更改字段类型(表中已有数据)
    Firefox内存占用过高解决方法
    接口开发中的测试问题
    c# winform 窗体起始位置 设置
    【整理】C#文件操作大全(SamWang)
    C#实现JSON序列化与反序列化
    解决方案资源管理器中跟踪活动项
    C#中方法的参数的四种类型
  • 原文地址:https://www.cnblogs.com/wy1290939507/p/4726674.html
Copyright © 2011-2022 走看看