嵌套for循环的java代码的复杂性

lqfhib0f  于 2021-07-07  发布在  Java
关注(0)|答案(2)|浏览(396)

我试图分析下面的代码。我希望计算复杂性和操作/迭代次数(这会导致复杂性)。我猜复杂性是o(n^2),因为我已经嵌套了for循环。但是,在内部循环中,值正在切换,替换位置。这个操作是不是会使算法重复多次,因此它不止是o(n^2),或者只可能有while循环?如何找到所完成的迭代/操作的确切数目?

for (int i = 0; i < b.Length; i++)
{
   for (int j = i + 1; j < b.Length; j++)
   {
       if (b[i] > b[j])
      {
            t = b[i];
            b[i] = b[j];
            b[j] = t;
      }
   }
}
j0pj023g

j0pj023g1#

循环的数量由 b.length 它是一个常数,索引变量i和j。只要你不在循环中干涉i和j,复杂性就保持不变。

zi8p0yeb

zi8p0yeb2#

外环有 b.length 迭代。我们称之为 n .
内环有 n - i - 1 迭代。
内部循环的总迭代次数为

(n - 1) + (n - 2) + ... + 1 = n * (n -1) / 2 = O(n^2).

内部循环的每次迭代都会执行常量工作(最多1个条件+3个赋值),因此总运行时间为 O(n^2) .
操作的确切次数取决于输入,因为输入决定条件为真的次数。

相关问题