C 时间计算复杂性?
下面有一个排序代码,它是冒泡排序,但我认为这个代码不完全是O(N^2)。我想知道下面这段代码的时间计算复杂度是多少。我猜是O(N.logN) 这里给出的代码只是一个示例,并不声称它是可编译的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] =
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步。