Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 时间计算复杂性?_C_Complexity Theory_Big O - Fatal编程技术网

C 时间计算复杂性?

C 时间计算复杂性?,c,complexity-theory,big-o,C,Complexity Theory,Big O,下面有一个排序代码,它是冒泡排序,但我认为这个代码不完全是O(N^2)。我想知道下面这段代码的时间计算复杂度是多少。我猜是O(N.logN) 这里给出的代码只是一个示例,并不声称它是可编译的 for(i = 0; i < n-1; i++) { for(j = 0; j < n-i-1; j++) { if (a[j+1] < a[j]) { temp = a[j]; a[j] =

下面有一个排序代码,它是冒泡排序,但我认为这个代码不完全是O(N^2)。我想知道下面这段代码的时间计算复杂度是多少。我猜是O(N.logN)

这里给出的代码只是一个示例,并不声称它是可编译的

for(i = 0; i < n-1; i++)
{
    for(j = 0; j < n-i-1; j++)
    {
        if (a[j+1] < a[j])
        {
            temp = a[j];
            a[j] = a[j+1];
            a[j+1] = temp;
        }
    }
}
(i=0;i { 对于(j=0;j 我猜是O(N.logN)

为什么猜测?看看到底发生了什么

第一次通过外循环时,i==0。这意味着j的范围是0到n-1

第二次到,i==1,因此j的范围为0到n-2

但第三次,i==2,因此j的范围为0到n-3

最后一次通过,i==n-1,因此j的范围为0到0

所以,操作的总数是n-1+n-2+n-3+…+0


总数是多少∑i、 i=0..n-1?现在将其转换为一个大O型绑定。

@PaulR Blooper更正-现在发布代码。Caleb是对的。它可能“感觉”小于O(n^2),因为内部循环随着外部循环的每次迭代而变短,而且这确实比内部循环每次变为“n”要快。然而,这并没有改变总的事实,即工作量随n呈指数增长。@Caleb感谢数学。是的,总的迭代次数似乎是N(N-1)/2,所以我看到它仍然是O(N^2)。N.logN(迭代的,不是递归的)算法是什么样子的。当我们(在排序数组上)进行二进制搜索时,当我们实际执行N-->N/2-->N/4等时,为什么说它是logN呢。将数组分成一半进行搜索?人们总是说二进制搜索==>logN,但我还没有找到它背后的数学基础?@goldenmean在二进制搜索中,你每一步都要将要搜索的内容数除以2。这意味着查找任何元素都需要log2(n)个步骤。试试看:如果n=8,它需要3个步骤。如果n=32,则为5步。