泡泡排序的复杂性

时间:2015-11-21 08:43:56

标签: java algorithm sorting time-complexity

我在很多地方看到过,冒泡排序的复杂性是O(n 2 )。

但是怎么会这样呢,因为内环应该总是运行n-i次。

for (int i = 0; i < toSort.length -1; i++) {
            for (int j = 0; j < toSort.length - 1 - i; j++) {
                if(toSort[j] > toSort[j+1]){
                    int swap = toSort[j+1];
                    toSort[j + 1] = toSort[j];
                    toSort[j] = swap;
                }
            }
        }

4 个答案:

答案 0 :(得分:7)

And what is the "average" value of n-i ? n/2

So it runs in O(n*n/2) which is considered as O(n2)

答案 1 :(得分:3)

有不同类型的时间复杂度 - 您使用的是大O符号,这意味着此函数的所有情况至少都是这种时间复杂度。

当它接近无穷大时,这基本上是n ^ 2时间复杂度的最坏情况。时间复杂性并不是一门确切的艺术,但更多的是为这类算法所期望的速度提供了一个大概的范围,因此你会试图过于精确。

例如理论时间复杂度很可能是n ^ 2,即使它理论上应该是n * n-1,因为可能会执行任何无法预料的处理开销。

答案 2 :(得分:1)

Since outer loop runs n times and for each iteration inner loop runs (n-i) times , the total number of operations can be calculated as n*(n-i) = O(n2).

答案 3 :(得分:0)

它是O(n ^ 2),因为长度*长度。