【问题标题】:Complexity of Bubble Sort冒泡排序的复杂性
【发布时间】:2016-02-23 19:30:08
【问题描述】:

我在很多地方都看到,冒泡排序的复杂度是 O(n2)。

但怎么会这样,因为内部循环应该总是运行 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;
                }
            }
        }

【问题讨论】:

    标签: java algorithm sorting time-complexity


    【解决方案1】:

    n-i 的“平均”值是多少? n/2

    所以它在O(n*n/2) 中运行,这被认为是 O(n2)

    【讨论】:

    • 但是为什么我们没有那个“/2”
    • @DeepakKumar 因为在处理规模时它没有任何意义。大 O 符号处理比例。您会认为 O(n) 与 O(n-1) 不同吗?即使 n != n-1 它们具有相同的比例。同样适用于n/2n
    【解决方案2】:

    有不同类型的时间复杂度 - 您使用的是大 O 表示法,这意味着该函数的所有情况都至少是这个时间复杂度。

    当它接近无穷大时,这基本上是 n^2 时间复杂度最坏的情况。时间复杂度不是一门精确的艺术,而更像是对此类算法的预期速度的大致了解,因此您试图过于精确。

    例如,理论上的时间复杂度很可能是 n^2,尽管它在理论上应该是 n*n-1,因为可能会执行任何不可预见的处理开销。

    【讨论】:

      【解决方案3】:

      由于外循环运行 n 次,并且每次迭代内循环运行 (n-i) 次,所以操作的总数可以计算为 n*(n-i) = O(n2)。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-23
          • 1970-01-01
          • 1970-01-01
          • 2015-06-15
          • 2015-05-17
          • 1970-01-01
          相关资源
          最近更新 更多