以下算法的复杂程度如何

时间:2014-06-27 17:17:48

标签: algorithm

我有一段代码。我认为代码的复杂性是O(n)。但不确定,那么请你确认一下吗?

int low=0;
int high=array.length-1;

while(low<high)
    {
        while(array[low]!=0)
            low++;
        while(array[high]==0)
            high--;

        int temp=array[low];
        array[low++]=array[high];
        array[high--]=temp;
    }

5 个答案:

答案 0 :(得分:2)

你的程序不断增加,直到它们满足为止,所以它的O(n)

答案 1 :(得分:2)

您的程序似乎是Merge algorithm,即O(N)或线性时间。

答案 2 :(得分:1)

在程序结束时,增加low加上递减次数high的次数将是数组的长度,即O(N)。

与此类似结构的着名算法是Quicksort中的分区步骤。如果您搜索它,您可能能够找到更详细的分析。

答案 3 :(得分:0)

O(n)的

你可能会对O(n ^ 2)感到困惑,但是你可以用if条件替换if,那么就没有2个循环,而循环只是放在那里以增加计算。

您也可以这样做:

while(low<high)
{
    if(arr[low]!=0)
        low++;
    if(arr[high]==0)
        high--;
    //Rest of the things
}

这里显然复杂度为O(n),代码完全相同。所以你的代码也是O(n)复杂性。

答案 4 :(得分:-1)

不一定是 如果{}中的所有内容都是O(1)那么它是O(n)

int low=0;
int high=array.length-1;
while(low<high)
{
}

如果{}中的某些东西是O(n)那么它将是n阶平方