我写了这个冒泡排序功能,但我很难搞清楚它的时间复杂性。
let newButtonFrame = currentButtonLocation
我知道外环的时间复杂度为O(n)。但是内循环的时间复杂度是多少(因为它在每次传递中经过了function bubbleSort(items) {
for (var i = items.length; i > 0; i--) {
for (var j = 0; j < i; j++) {
if (items[j] > items[j + 1]) {
var temp = items[j];
items[j] = items[j + 1];
items[j + 1] = temp;
}
}
}
return items;
}
的少一个元素)?
答案 0 :(得分:1)
内环是O(n)。在开始时它将执行n次,最后一次。平均而言,它将执行n / 2次。常数因素并不重要,所以O(n)。
因此,整体运行时间为O(n 2 )。
答案 1 :(得分:1)
如果你考虑运行内循环的次数,你可能会有更好的想法:
1st run : N times,
2nd run: N-1 times
...
Nth run: 1 time.
如果你全部添加
N + (N-1) + (N-2) + ... + 1 = [N * (N+1)]/2
次。这使得O(N ^ 2)。有关详细信息,请在此处查看以下答案:https://stackoverflow.com/a/29556003
答案 2 :(得分:1)
计算算法时间复杂度的一种方法是注意内循环执行i
次迭代,其中i
的范围从n
到1(n
是输入的长度)。这意味着我们可以进行求和以获得算法中的步骤总数:
n + (n-1) + ... + 3 + 2 + 1
这个总和有一个熟悉的封闭公式:
n*(n+1) / 2
这个公式显然是O(n^2)
。