【发布时间】:2015-06-15 20:13:07
【问题描述】:
我试图了解数据结构和不同的算法,然后我对测量冒泡排序时间复杂度感到困惑。
for (c = 0; c < ( n - 1 ); c++) {
for (d = 0; d < n - c - 1; d++) {
if (array[d] > array[d+1]) /* For descending order use < */
{
swap = array[d];
array[d] = array[d+1];
array[d+1] = swap;
}
}
}
现在每个大 O 都告诉最佳情况 O(n)、平均情况 (n2) 和最坏情况 (n2)。但是当我看到代码时,发现在第一阶段内循环运行 n 次,然后在第二阶段 n - 1 , 和 n - 2 等等。这意味着在每次迭代中,它的价值都会下降。 例如,如果我有 a[] = {4, 2, 9, 5, 3, 6, 11} 那么比较的总数将是 -
1st Phase - 7 time
2nd phase - 6 time
3rd Phase - 5 time
4th Phase - 4 time
5th Phase - 3 time
6th Phase - 2 time
7th Phase - 1 time
所以当我计算时间时,它看起来像 = (7 + 6 + 5 + 4 + 3 + 2 + 1) + 7 = 35,但根据文档,最差的时间复杂度是 n2。
所以有人可以告诉我如何计算正确的值。
【问题讨论】:
-
O(n^2)非常不意味着总步数将完全等于n^2。 -
要添加到@AakashM,首先需要了解
O(...)符号的含义。例如:stackoverflow.com/questions/487258/…