你会说这个功能的时间复杂度是多少? 我认为它的O(logN),但你能验证吗?如果不是可以使它成为LogN? 我试图计算旋转阵列上的移位量
int findRotationCount(int A[], int sizeOfArray) //O(logN)
{
int countOfShift = 0, i;
for (i = 0; i < sizeOfArray; ++i)
{
++countOfShift;
if (i+1 == sizeOfArray)
break;;
if (A[i] > A[i+1])
break;
}
}
谢谢!
答案 0 :(得分:0)
对我来说看起来像O(N)
,其中N
是您的sizeOfArray
值。
答案 1 :(得分:0)
我认为它是O(n)
,其中n=sizeOfArray
。这是证据:
如果满足以下条件中的至少一个,则循环可以结束:
i=n
=&gt;有n
次迭代,因此,您的函数的复杂性为O(n)
。A[i] > A[i+1]
=&gt;数组中存在一个大于下一个的成员。在这里,你将不得不考虑你的功能的最坏情况。对于这个,它是一个按递增顺序排序的数组。这意味着您将从第一个成员遍历数组到最后一个成员,并且永远不会发现满足第二个条件。因此,在最坏的情况下,复杂性为O(n)
。由于你的函数在满足条件1和2中的至少一个时结束,并且我们已经证明在两种情况下复杂度都是O (n)
,那么你可以说函数的复杂性也是{ {1}}。
请注意,这是最糟糕的案例分析。