主要是二分法的时间复杂度的计算方法。

作业里能通过的代码如下:

 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).

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!