这个冒泡排序功能的时间复杂度是多少?

时间:2017-01-22 04:45:08

标签: javascript time-complexity big-o bubble-sort

我写了这个冒泡排序功能,但我很难搞清楚它的时间复杂性。

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; } 的少一个元素)?

3 个答案:

答案 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)