主要是二分法的时间复杂度的计算方法。
作业里能通过的代码如下:
1 Position BinarySearch(List L,ElementType X){ 2 int mid=0,l=1,r=(*L).Last; 3 mid=(l+r)/2; 4 while(l<=r){ 5 if(X==(*L).Data[mid]){ 6 return mid; 7 } 8 else if(X<(*L).Data[mid]){ 9 r=mid-1; 10 mid=(l+r)/2; 11 } 12 else if(X>(*L).Data[mid]){ 13 l=mid+1; 14 mid=(l+r)/2; 15 } 16 } 17 return NotFound; 18 }
二分法一次去掉数组中的一半元素,以8个数为例:
8*(1/2)=4
8*(1/2^2)=2
8*(1/2^3)=1
共需要k次操作:
n*(1/2^k)=1
n=2^k
k=log n
即T(n)=O(log n).
内容来源于网络如有侵权请私信删除
- 还没有人评论,欢迎说说您的想法!