def Recursive_Binary_Search(T,left,right,key):
if left>right:
return -1 #找不到
mid = (left+right)//2 #向下取整
if key == T[mid]:
return mid
elif key > T[mid]:
return Recursive_Binary_Search(T,mid+1,right,key)
else:
return Recursive_Binary_Search(T,left,mid-1,key)
def Iterative_Binary_Search(T,left,right,key):
while(left<=right):
mid = (left+right)//2
if key == T[mid]:
return mid
elif key > T[mid]:
left=mid+1
else:
right=mid-1
return -1
#test
T=[-5,-6,0,7,9,23,54,82,101]
T.sort()
left=0
right=len(T)-1
print(T)
key=101
print(Recursive_Binary_Search(T,left,right,key))
print(Iterative_Binary_Search(T,left,right,key))
binary_search [] _ _ = False
binary_search (x:[]) key _ = x==key
binary_search xs key len
| mid_value == key = True
| mid_value > key = binary_search (take middle xs) key middle
| mid_value < key = binary_search (drop (middle+1) xs) key (len-middle-1)
where middle = div (len-1) 2
mid_value = xs!!middl
--haskell
int bisearch(char **arr,int b,int e,char *v)
{
int minIndex=b,maxIndex=e,midIndex;
while(minIndex < maxIndex-1)
{
midIndex = minIndex+(maxIndex-minIndex)/2;
if(strcmp(arr[midIndex],v)<=0) minIndex=midIndex;
else maxIndex=midIndex;
}
if(!strcmp(arr[maxIndex],v)) return maxIndex;
else if(!strcmp(arr[minIndex],v)) return minIndex;
else return (-1);
}