首页 新闻 会员 周边

关于一个程序的时间复杂度问题

0
悬赏园豆:20 [已解决问题] 解决于 2012-08-14 13:18

代码如下

        public void ShellSort()
        {
            int inner, temp;
            int h = 3;
            while (h > 0)
            {
                for (int outer = h; outer <= numElements - 1; outer++)
                {
                    temp = arr[outer];
                    inner = outer;
                    while ((inner > h - 1) && arr[inner - h] >= temp)
                    {
                        arr[inner] = arr[inner - h];
                        inner -= h;
                    }
                    arr[inner] = temp;
                }
                h = (h - 1) % 3;
            }
        }

帮我分析分析这段代码的时间复杂度,我不太会算时间复杂度,所以想根据这个例子学习一下时间复杂度的算法,要按照这个例子帮我分析下

微澜的主页 微澜 | 初学一级 | 园豆:-1
提问于:2012-06-08 21:01
< >
分享
最佳答案
0

其实,也不难的,你慢慢想想。就是把程序从头到尾每条语句的执行次数加起来。也就是,一段代码执行次数的数量级。比如,赋值语句,算1;像 if 判断语句也算 1,因为,它只最多执行一次(执行一次,或不执行);而一个简单的循环语句,假设循环n次,就算n,但若是两层循环,外层到n,内层到m,那就是n×m。

全加起来。你会发现,时间体现的是数量级,所以,赋值语句和判断语句对数量级没有意义,也就是说,只有循环语句对计算时间复杂度有意义。比如,两层循环,外层n次,内层m次,那就执行 n×m 次,假设该循环前有一个赋值语句,那就是 n×m+1,再假设该循环后,有一个判断语句,那就是 n×m+1+1=O(n×m)。

另外,还要给出,最好和最坏的情况,看看程序分别能执行多少次。

收获园豆:20
船长&CAP | 菜鸟二级 |园豆:318 | 2012-06-09 10:07

能帮我分析分析这个例子么?

微澜 | 园豆:-1 (初学一级) | 2012-06-09 12:23
其他回答(1)
0
无之无 | 园豆:5095 (大侠五级) | 2012-06-09 10:14

能帮我分析分析这个例子么?

支持(0) 反对(0) 微澜 | 园豆:-1 (初学一级) | 2012-06-09 12:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册