数据结构与算法(二)—— 复杂度分析(下)
除了前面记录的复杂度的基础知识,还有四个复杂度分析方面的知识点:最好情况时间复杂度、最坏情况时间复杂度、平均情况时间复杂度、均摊时间复杂度。
一、最好、最坏情况时间复杂度
- 最好情况时间复杂度,就是在最理想的情况下,执行这段代码的时间复杂度。
- 最坏情况时间复杂度,就是最糟糕的情况下执行这段代码的时间复杂度
先看一段代码
public int find(int[] array, int n,int x){
int pos = -1;
for (int i = 0;i < n; i++){
if (array[i] == x )
pos = i ;
}
return pos;
}
这是在一个无序的数组中查找x的位置,并返回x的下标,如果没找到就返回-1。由于这段代码需要循环执行n次,所以时间复杂度为O(n)。
但是实际上,在数组查找一个数据时,不需要把整个数组都遍历,在找到所需要的数据之后就应该停止遍历并返回数据的位置,所以,在优化代码之后,再来看它的时间复杂度。
public int find(int[] array, int n,int x){
int pos = -1;
for (int i = 0;i < n; i++){
if (array[i] == x ){
pos = i ;
break;
}
}
return pos;
}
在优化之后,在不同情况下break执行的时机不同&#