查找阵列中最小元素索引的时间复杂度分析 - 最差,平均和最佳情况

时间:2017-06-30 10:35:22

标签: c arrays time-complexity nested-loops

int j = 0;
for(int i = 0; i < n; ++i) {
    while(j < n && arr[i] < arr[j]) {
        j++;
    }
}

这是一个用于查找数组中最小元素(第一次出现)的索引的代码。我说最坏的情况是O(n2)最好的情况是O(n)。

问题1:在最坏的情况下,我的内部while循环并不总是运行n次,在最多的情况下,它将相对于外部for循环运行1或2次,所以我假设内部循环运行(nc)次,其中c是一些常量,外部循环运行n次。我正确地认为复杂性是n *(nc)是O(n2)?

在最好的情况下,最小元素在第一个索引处,我的内部循环不会在任何时间运行,因此时间复杂度为O(n)。

问题2:我如何得出平均情况?

2 个答案:

答案 0 :(得分:2)

您从j = 0开始,永不递减jwhile循环的每次迭代都会将j增加1,while循环的条件为j < n,因此语句j++最多可以运行n 1}}次,即最坏情况O(n)。

答案 1 :(得分:1)

我们可以在找到Big O符号(why?)时忽略常量。

为了找到数组中最小元素的索引而编写的程序,当数组元素按递增顺序进行n次迭代,当数组元素按递减顺序进行2次n次迭代。但我们可以简单地得出结论,该算法在所有三种情况下都具有整体O(n)复杂度。