int Find(ElemType a[ ],int s,int t,ElemType x)
{ int m=(s+t)/2;
if (s<=t)
{ if (a[m]==x)
return m;
else if (x<a[m])
return Find(a,s,m-1,x);
else
return Find(a,m+1,t,x);
}
return -1;
}
是log(n),可以改成T(n) = T(n/2) + a, T(1) = b,这样的形式求解然后目测得复杂度
你这个是二分搜索,所以时间复杂度是 O=Log(n)
设find(a,0,n-1,x)的执行时间为T(n),当n=1时,T(n)=1,
当n>1时,T(n)=T(n/2)+1
设Find(a,0,n-1,x)的执行时间为T(n),则有:
T(n)=1 当n=1
T(n)=T(n/2)+1 当n>1
不妨设n=2k,即k=log2n。
T(n)=T(n/2)+1=T(n/22)+2=T(n/23)+3=…=T(n/2k)+k=1+k=log2n+1=O(log2n)。
该算法的时间复杂度是O(log2n)。