【发布时间】:2012-07-13 17:34:57
【问题描述】:
for (int front = 1; front < intArray.length; front++)
{
for (int i = 0; i < intArray.length - front; i++)
{
if (intArray[i] > intArray[i + 1])
{
int temp = intArray[i];
intArray[i] = intArray[i + 1];
intArray[i + 1] = temp;
}
}
}
内部循环正在迭代:n + (n-1) + (n-2) + (n-3) + ... + 1 次。
外部循环正在迭代:n 次。
所以你得到 n *(数字 1 到 n 的总和)
那不是 n * ( n*(n+1)/2 ) = n * ( (n^2) + n/2 )
这将是 (n^3) + (n^2)/2 = O(n^3) 吗?
我很肯定我做错了。为什么不是 O(n^3)?
【问题讨论】:
-
您将外部
n数了两次。您的内部循环本身是 O(n)。 -
不要吹毛求疵,但您显示的算法是 Selection sort 而不是 Bubble sort
-
上周,我写了一篇关于渐近复杂性的文章,巧合的是,我以冒泡排序为例。试一试 :-) (en.algoritmy.net/article/44682/Asymptotic-complexity)。你的错误是,正如 Henk 所说的那样,内循环是 O(n)。 O(n^2) - 算术顺序的总和是两个循环的复杂度。
-
我同意,这不是冒泡排序
-
添加评论,因为此处显示的算法是编辑后的冒泡排序。我读了 cmets 并感到困惑,但相信现在已经解决了。
标签: algorithm sorting complexity-theory big-o bubble-sort