#33. 算法和复杂度(一)

算法和复杂度(一)

  1. 下列算法中,没有运用分治思想的一项是() {{ select(1) }}
  • 归并排序算法
  • 求二叉树的前序遍历
  • 快速排序算法
  • 求二叉树的层次遍历
  1. 下列算法中,()是稳定的排序算法。 {{ select(2) }}
  • 快速排序
  • 堆排序
  • 希尔排序
  • 插入排序
  1. 排序算法稳定的意思是关键码相同的记录排序前后相对位置不发生改变,下列哪种排序算法是不稳定的。 {{ select(3) }}
  • 冒泡排序
  • 插入排序
  • 归并排序
  • 快速排序
  1. 以下哪种排序算法的时间复杂度是 O(n2)O(n^2)。 {{ select(4) }}
  • 计数排序
  • 插入排序
  • 希尔排序
  • 归并排序
  1. 以比较作为基本运算,在 NN 个数中找出最大数,最坏情况下所需要的最少的比较次数为()。 {{ select(5) }}
  • N2N^{2}
  • NN
  • N1N-1
  • N+1N+1
  1. 将数组 {8,23,4,16,77,5,53,100}\{8,23,4,16,77,-5,53,100\} 中的元素按从小到大的顺序排列,每次可以交换任意两个元素,最少需交换几次? {{ select(6) }}
  • 44
  • 55
  • 77
  • 66
  1. 对有序数组 {5,13,19,21,37,56,64,75,8892100}\{5, 13, 19, 21, 37, 56, 64, 75, 88,92,100\} 进行二分查找,成功查找元素 1919 的查找长度(比较次数)是( )。 {{ select(7) }}
  • 11
  • 22
  • 33
  • 44
  1. 冒泡排序算法的伪代码如下:
输入:数组 L, n ≥ k。输出:按非递减顺序排序的 L。
    算法 BubbleSort:
       1. FLAG ← n //标记被交换的最后元素位置
       2. while FLAG > 1 do
       3・ k ← FLAG -1
       4・ FLAG ← 1
       5・ for j=1 to k do
       3.   if L(j) > L(j+1) then do
       7・    L(j)  ↔ L(j+1)
       8・    FLAG ← j

nn 个数用以上冒泡排序算法进行排序,最少需要比较多少次?( )。 {{ select(8) }}

  • n2n^2
  • n2n-2
  • n1n-1
  • nn
  1. 设有 100100 个已排好序的数据元素,采用折半查找时,最大比较次数为() {{ select(9) }}
  • 77
  • 1010
  • 66
  • 88$
  1. 设 A 和 B 是两个长为 nn 的有序数组,现在需要将 A 和 B 合并成一个排好序的数组,任何以元素比较作为基本运算的归并算法在最坏情况下至少要做( )次比较。 {{ select(10) }}
  • n2n^2
  • nlognn\log n
  • 2n2n
  • 2n12n - 1
  1. 考虑如下递归算法
solve(n)  
      if n <= 1 return 1  
      else if n >= 5 return n * solve(n - 2)  
      else return n * solve(n - 1)

则调用 solve(7) 得到的返回结果为( )。

{{ select(11) }}

  • 105105
  • 840840
  • 210210
  • 420420
  1. 快速排序最坏情况下的时间复杂度是 {{ select(12) }}
  • O(log2n)O(\log_2{n})
  • O(n)O(n)
  • O(nlog2n)O(n\log_2{n})
  • O(n2)O(n^2)
  1. 下列算法中,运用分治思想的一项是() {{ select(13) }}
  • 快速排序算法
  • 插入排序算法
  • 冒泡排序算法
  • 计数排序算法
  1. 以下排序算法在最坏情况下时间复杂度最优秀的是 {{ select(14) }}
  • 冒泡排序算法
  • 快速排序算法
  • 归并排序算法
  • 插入排序算法