二分查找

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);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值