我有一段代码。我认为代码的复杂性是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;
}
答案 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阶平方