【发布时间】:2015-06-16 18:33:49
【问题描述】:
代码如下:
for (int i = 1; i < N; i++) {
if (a[i] < a[i-1]) {
swap(i, i-1);
i = 0;
}
}
在尝试了一些事情之后,我认为最坏的情况是输入数组按降序排列。然后看起来比较将是最大的,因此我们将只考虑比较。那么它似乎是总和的总和,即 ... {1+2+3+...+(n-1)}+{1+2+3+...+(n-2 )}+{1+2+3+...+(n-3)}+ .... + 1 如果是的话 O(n) 是什么?
如果我不在正确的道路上,有人可以指出 O(n) 是什么以及如何推导出它?干杯!
【问题讨论】:
-
该算法一次删除一个反转。在最坏的情况下,它会进行 O(n^2) 次交换,并且可能会进行 O(n^3) 次其他操作,因为至少一半的交换将发生在数组的后半部分。
标签: algorithm sorting time-complexity