[数据结构与算法 03] 最好、最坏、平均、均摊 时间复杂度
由来 /**** 在一个无序的数组(array)中 查找变量 x 第一次出现的位置。如果没有找到,就返回 -1 ****/ // n 表示数组array的长度 int find(int[] array, int n, int x) { int i = 0; int pos = -1; for (; i < n; ++i) { if (array[i] == x) pos = i; } return pos; } 分析出此函数的时间复杂度为 O(n) 在数组中查找一个数据,并不需要每次都把整个数组都遍历一遍, 因为有可能中途找到就可以提前结束循环了。 所以我们可以这样优化一下这段查找代码 /**** 在一个无序的数组(array)中 查找变量 x 第一次出现的位置。如果没有找到,就返回 -1 ****/ // n 表示数组array的长度 int find(int[] array, int n, int x) { int i = 0; int pos = -1; for (; i < n; ++i) { if (array[i] == x) { pos = i; break; // 已经找到了,就不必继续找了 } } return pos; } 那么问题来了,如此优化以后,时间复杂度还是 O(n) 吗??? 可能第一次就找到了,只循环了一次,那时间复杂度就是 O(1)