首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

这道题应该如何做

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

这道题应该怎么做
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)

热点排行