当前位置:首页>开发>正文

谁会用python写个二分法查找的循环 利用递归实现二分搜索(c )

2023-04-13 14:34:32 互联网 未知 开发

 谁会用python写个二分法查找的循环 利用递归实现二分搜索(c  )

谁会用python写个二分法查找的循环

#!/usr/bin/env python  
import sys   

def search2(a,m):  
    low = 0   
    high = len(a) - 1   
    while(low <= high):  
        mid = (low   high)/2  
        midval = a[mid]  

        if midval < m:  
            low = mid   1   
        elif midval > m:  
            high = mid - 1   
        else:  
            print mid   
            return mid   
    print -1  
    return -1  

if __name__ == "__main__":  
    a = [int(i) for i in list(sys.argv[1])]  
    m = int(sys.argv[2])  
    search2(a,m)

利用递归实现二分搜索(c )

int BinSearch(int Array[],int low,int high,int key/*要找的值*/)
{
if (low<=high)
{
int mid = (low high)/2
if(key == Array[mid])
return mid
else if(keyreturn BinSearch(Array,low,mid-1,key) else if(key>Array[mid]) return BinSearch(Array,mid 1,high,key) } else return -1 }

二分查找算法

前提要求数据排好序,有递归和非递归版本
int binSearch(const int *Array,int start,int end,int key)
{
int left,right
int mid
left=start
right=end
while (left<=right) { /注释中为递归算法,执行效率低,不推荐
mid=(left right)/2
/* if (key<Array[mid]) {
return(binSearch(Array,left,mid,key))
}
else if(key>Array[mid]){
return (binSearch(Array,mid 1,right,key))
}
else
return mid
*/
if (key<Array[mid]) {
right=mid-1
}
else if(key>Array[mid]){
left=mid 1
}
else
return mid
}
return -1
}

关于二分查找

对于查找条件为等式的情况,mid指针可以指向中间偏左,也可以指向中间偏右,对于查找条件为不等式时,要根据具体情况选择,查找大于某数的第一个数值时选择指向中间偏左,查找小于某数的第一个数值时选择之下是那个中间偏右
这个说法是错误的,二分查找的复杂度为O(logn),简单的说,就是对于n个元素的数组,大约需要查找logn次,如n=1000,则需要7次查找

最新文章

随便看看