以下函数的时间复杂度是多少?
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++;
}
}