2 while循环嵌套在1循环中的复杂性

时间:2015-09-19 15:55:48

标签: algorithm time-complexity

这是我的代码。我想知道如何计算这个非常具体的代码部分的时间复杂度。根据规则,我们需要计算第一个内部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--;
    }
}

1 个答案:

答案 0 :(得分:1)

这是O(end - start)

  

根据规则,我们需要计算第一个内部2个while循环,然后添加它们然后将它们与外部循环相乘

没有这样的规则。您需要考虑执行的操作总数。有时你按照你的描述做,但没有这样的一般规则。

考虑每个元素的访问频率:O(1)次。内环使startend朝向彼此移动。外部循环不会重置内部循环,它们会在它们离开上一次迭代的地方继续。由于您执行O(1)O(end - start)次操作,因此O(end - start)