📜  算法|算法分析|问题8

📅  最后修改于: 2021-06-28 17:23:47             🧑  作者: Mango

以下函数的时间复杂度是多少?

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

(A) O(n)
(B) O(n ^ 2)
(C) O(登录)
(D) O(n(登录)^ 2)答案: (A)
说明:乍看之下,由于两个循环,时间复杂度似乎为O(n ^ 2)。但是,请注意,变量j并未为变量i的每个值初始化。因此,内部循环最多运行n次。请注意所提供的函数与以下函数之间的区别:

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