java - 从代码中逐行计算 while 和 switch case 的时间复杂度以及插入排序的示例

标签 java algorithm sorting time-complexity

有许多指南可以告诉您如何通过查看代码/算法并逐行应用来计算时间复杂度。但是我发现 whileswitch 循环很难。有人可以帮我弄清楚在这种情况下该怎么做吗?

插入排序的示例以及我是如何卡住的:

int i,j,n=a.length,temp; //c1
        for(i=1;i<n;i++) // (n)
        {
            j=i-1; // c2
            temp=a[i]; // c3
            while(j>=0&&a[j]>temp) (Stuck here)
            {
                a[j+1]=a[j];// c4
                j=j-1; //c5
            }
            a[j+1]=temp; //c6
        }

最佳答案

由于您不只是浏览集合,而是在某些时候根据某些条件打破循环,您的结果将有一个最好和一个最坏 案例场景。

外层 for 循环将始终执行 n - 1迭代。在计算复杂度常量时通常会省略,因此您的外循环将具有常量复杂度 n。 .

while 循环将取决于两个条件:j大于 0 并且 j大于 temp .

应该a[j] > temp为每个 n 持有,那么您的代码的复杂度应为 n .

如果另一方面,a[j] < temp对于每个 n , 然后 j>=0将是决定性条件。 j将从小开始增加为 n增加,因此两个循环都将运行 nj次。

n < nj ,然后,您可以得出结论,最佳情况的时间复杂度为 n .另一方面,最坏的情况是nj。 .自 j = n - 1 , 你可以说复杂度是 n(n - 1)这将导致 n^2 - n ,这将大致导致最坏情况下的时间复杂度为 n^2 .

关于java - 从代码中逐行计算 while 和 switch case 的时间复杂度以及插入排序的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32634263/

相关文章:

sorting - 按 Spring Data 中的 boolean 值排序

java - 使用SpringBoot初始化jOOQ

algorithm - 在对不同的对象属性执行操作时避免重复代码

performance - 最有效地在维护的大型排序变量中插入数字

python - 有效地对列表中的元素进行加权计数

java - 使用 `+` 或 `-` 运算符打印可以给出给定数字的所有组合

asp.net-mvc - ASP.NET MVC - Model.OrderBy Date 没有效果

java - 没有 pojo 的改造和 GSON

java - log4j 属性文件

java - 以文件名作为参数执行 jar 文件