这是我的代码。我想知道如何计算这个非常具体的代码部分的时间复杂度。根据规则,我们需要计算第一个内部2 while循环,然后添加它们然后将它们与外循环相乘,但我无法弄清楚如何计算它们然后到达答案。
int start=first,end=last;
int mid= (first+last)/2;
int temp;
while(start<=end)
{
while(a[start]<a[mid])
{
start=start+1;
}
while(a[end]>a[mid])
{
end=end-1;
}
if(start<=end)
{
temp=a[start];
a[start]=a[end];
a[end]=temp;
start++;
end--;
}
}
答案 0 :(得分:1)
这是O(end - start)
。
根据规则,我们需要计算第一个内部2个while循环,然后添加它们然后将它们与外部循环相乘
没有这样的规则。您需要考虑执行的操作总数。有时你按照你的描述做,但没有这样的一般规则。
考虑每个元素的访问频率:O(1)
次。内环使start
和end
朝向彼此移动。外部循环不会重置内部循环,它们会在它们离开上一次迭代的地方继续。由于您执行O(1)
次O(end - start)
次操作,因此O(end - start)
。