读书人

这道题应该如何做

发布时间: 2012-11-04 10:42:42 作者: rapoo

这道题应该怎么做
1.共有5个元素的数组,在使用快速排序算法对它排序的时候,最糟糕的情况下需要比较几次,最好的情况需要比较几次。。怎么算。。不太会。。


2.假设执行函数func()的时间复杂度为O(1),则下面代码的执行复杂度为
for(int i=0;i<n;i++)
for(int j=0;j<i;j++)
func();


有可能的话讲解的尽量详细点。。。

[解决办法]
1,最好的情况是6次,最坏的情况是10次。
【1,2,3,4,5】;
如果每次都是取最后一个元素为中心轴就是最坏的情况,
第一轮需要比较4次,就是1,2,3,4,都有和5比较;
第二轮分解为[1,2,3,4]5,
这一轮取到了4,需要比较3次,就是123都要和4比较。
第三轮是2次,第四轮是1次。所以一共10次。

最好的情况是取中间的数作为中心轴,
第一轮还是4次;
第二轮分解为[1,2]3[4,5],
有两个小问题[1,2],[4,5];
每个小问题只要比较1次即可。
所以一共6次。

[解决办法]
2,func的执行次数为T=1+2+3+。。。+n-1=n(n-1)/2=0.5*n^2-0.5*n
去掉系数和低次项,
所以是O(n^2)

读书人网 >软件架构设计

热点推荐