• 2.27专项测试复盘


    • 总排序趟数与初始状态无关的有:(除了快速排序和优化的冒泡,其他都是)

    • 算法复杂度与初始状态无关的有:堆排序、归并排序、选择排序、基数排序。

    • 元素总比较次数与初始状态无关的有:选择排序、基数排序。

    • 元素总移动次数与初始状态无关的有:归并排序、基数排序。

    • 快速排序的最坏情形是数组为正序或逆序,如果pos总是选择第一个元素,那么每次划分只得到一个比上一次划分少一个记录的子序列,此时需要执行次递归调用。显然,采用A(划分元素为三者居中),能够将每次待排序的pos尽可能一分为二,从而使得递归深度为log(2,n),即空间复杂度为O(log(2,n))。

    • 排序时,若不采用计数排序的等空间换时间的方法,合并m个长度为n的已排序数组的时间复杂度最优为(O(mn(logm))

      解析:当n=1时,就成了m个数的归并排序,时间复杂度为O(mlogm)

    • 在最好情况下,下列排序算法中() 排序算法所需比较关键字次数最少。
      A. 冒泡排序
      B. 直接插入排序
      C. 快速排序
      D. 归并排序

      解析:冒泡注意加flag可以在无交换时一次退出,最优O(N),比较N-1次;直插法在原数组有序时也只比较N-1次
      答案:AB

    • 采用递归方式对顺序表进行快速排序。下列关于递归次数的叙述中,正确的是()。
      A. 递归次数与初始数据的排列次序无关
      B. 每次划分后,先处理较长的分区可以减少递归次数
      C. 每次划分后,先处理较短的分区可以减少递归次数
      D. 递归次数与每次划分后得到的分区的处理顺序无关

      解析:快速排序的递归次数与分区处理顺序无关,即先处理较长的分区或先处理较短的分区都不影响递归次数。
      答案:D

  • 相关阅读:
    从string类的实现看C++类的四大函数 [写的很好]
    毕业5年决定你的命运
    git push 原因以及问题!
    poj 1195 Mobile phones 夜
    poj 2886 Who Gets the Most Candies 夜
    poj Asimple Problem With Integers 夜
    poj 2750 Potted Flower 夜
    poj 2528 Mayor's posters 夜
    poj 2777 Count Color 夜
    poj 2482 Stars in Your Window 夜
  • 原文地址:https://www.cnblogs.com/l999q/p/12372466.html
Copyright © 2020-2023  润新知