一台机器花了200秒使用冒泡排序对200个名称进行排序。然后在800秒内将分拣多少名称。请帮我解决这个问题。我尝试使用冒泡排序的时间复杂度来解决它,但我无法做到这一点
并且还希望找到以下代码的复杂性
int somefunct(int n)
{
if(n<=2)
return 1;
else
return (somefunct(floor(sqrt(x)))+x);
}
答案 0 :(得分:1)
由于在最坏的情况下按冒号排序的时间是n中的2次多项式,我们有:
t = an^2 + bn + c
现在,因为n足够大(这里200),所以我们可以忽略最后两个术语:
t = an^2
将值t = 200
和n = 200
放到a = 1/200
因此,在800秒内,您将能够排序:
800 = (1/200)*(n^2)
=> n = 400
名称
至少是因为这是最糟糕的情况。
答案 1 :(得分:0)
在最坏的情况下,冒泡排序的复杂性为O(n^2)
。因此,在给定时间的4倍中,它将对当前名称进行两次排序。即。在最坏的情况下,在800秒内有400个名字。
答案 2 :(得分:0)
对于200个名称的排序,冒泡排序可以进行200 * 199/2 = 19900比较 1比较所需的时间是200秒。在800秒内它可以进行80,000次比较 我们必须找到n,这样n(n-1)/ 2 = 80,000。 =&GT; n ^ 2 - n = 160000.上一项可以忽略不计。因此,n ^ 2 = 160000。答案= 400。