题目
以下哪个算法的时间复杂度是O(n)?A. 线性查找B. 快速排序[1]C. 冒泡排序[2]D. 二分查找
以下哪个算法的时间复杂度是O(n)?
A. 线性查找
B. 快速排序[1]
C. 冒泡排序[2]
D. 二分查找
题目解答
答案
A. 线性查找
解析
本题主要考察常见算法的时间复杂度分析,需明确各选项算法的时间复杂度特征:
选项A:线性查找
线性查找(顺序查找)的逻辑是从数据结构的一端开始,逐个比较元素与目标值是否相等。在最坏情况下(目标元素在最后一位或不存在),需要遍历所有 $n$ 个元素,因此时间复杂度为 $O(n)$,符合题目要求。
选项B:快速排序
快速排序的核心是分治:选择基准元素,将数组分为小于基准和大于基准的两部分,递归排序子数组。其平均时间复杂度为 $O(n\log n)$,但最坏情况下(如数组已有序,每次基准选最小/最大值)时间复杂度退化为 $O(n^2)$,不符合 $O(n)$。
选项C:冒泡排序
冒泡排序通过反复交换相邻的逆序元素实现排序。无论{无论数据初始状态如何,} 最坏、平均和最好时间复杂度均为 $O(n^2)$(最好情况可优化至 $O(n)$,但通常不视为标准时间复杂度),不符合 $O(n)$。
选项D:二分查找
二分查找要求数据有序,每次通过比较中间元素将查找范围缩小一半。时间复杂度为 $O(\log n)$,与 $O(n)$ 不同。