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)。

  • 相关阅读:
    【leetcode】1630. Arithmetic Subarrays
    【leetcode】1629. Slowest Key
    【leetcode】1624. Largest Substring Between Two Equal Characters
    【leetcode】1620. Coordinate With Maximum Network Quality
    【leetcode】1619. Mean of Array After Removing Some Elements
    【leetcode】1609. Even Odd Tree
    【leetcode】1608. Special Array With X Elements Greater Than or Equal X
    【leetcode】1603. Design Parking System
    【leetcode】1598. Crawler Log Folder
    Java基础加强总结(三)——代理(Proxy)Java实现Ip代理池
  • 原文地址:https://www.cnblogs.com/wy1290939507/p/4726674.html
Copyright © 2011-2022 走看看