python实现二分查找(binary search)

二分查找是一种常见的搜索方法,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,二分查找方法适用于不经常变动而查找频繁的有序列表。

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

下面提供两种实现方法,递归方法和非递归方法:

def binary_search_recurrent(alist, item):
    n = len(alist)
    if n < 1:
        return False
    else:
        mid = n // 2
        if item == alist[mid]:
            return True
        elif item < alist[mid]:
            return binary_search_recurrent(alist[:mid], item)
        else:
            return binary_search_recurrent(alist[mid+1:], item)

def binary_search_simple(alist, item):
    n = len(alist)
    start = 0
    end = n-1
    while start <= end:
        mid = (start + end) // 2
        if item == alist[mid]:
            return True
        elif item < alist[mid]:
            end -= 1
        else:
            start += 1
    return False

测试:

if __name__ == "__main__":
    li = [17, 20, 26, 31, 44, 54, 55, 77, 93]

    print(binary_search_recurrent(li, 20))
    print(binary_search_recurrent(li, 200000))

    print(binary_search_simple(li, 20))
    print(binary_search_simple(li, 200000))

运行一下:

True
False
True
False

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为你提供一个Python实现二分查找的示例代码:def binary_search(array, target): n = len(array) left = 0 right = n - 1 while left <= right: mid = (left + right) // 2 if array[mid] == target: return mid elif array[mid] < target: left = mid + 1 else: right = mid - 1 return -1 ### 回答2: 二分查找是一种高效的查找算法,可以用来在有序数组中快速找出特定元素的位置。下面是用Python实现二分查找的代码: ```python def binary_search(arr, target): low = 0 high = len(arr) - 1 while low <= high: mid = (low + high) // 2 if arr[mid] == target: return mid elif arr[mid] < target: low = mid + 1 else: high = mid - 1 return -1 ``` 这段代码首先初始化了low和high两个变量,它们分别表示数组的起始和结束位置。然后,利用一个while循环来在数组中查找目标元素。 在循环中,首先计算出当前的中间位置mid。然后,判断mid位置的元素与目标元素的大小关系。 - 如果mid位置的元素等于目标元素,说明找到了目标,直接返回mid。 - 如果mid位置的元素小于目标元素,说明目标元素在mid右侧,将low更新为mid+1。 - 如果mid位置的元素大于目标元素,说明目标元素在mid左侧,将high更新为mid-1。 如果循环结束后仍然没有找到目标元素,说明目标元素不存在于数组中,返回-1。 这就是用Python实现二分查找的基本过程。二分查找的时间复杂度为O(log n),比线性查找更加高效。 ### 回答3: 二分查找Binary Search)是一种高效的搜索算法,用于在有序数组中查找目标元素。以下是使用Python实现二分查找的示例代码: ```python def binary_search(arr, target): left = 0 right = len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 arr = [2, 4, 6, 8, 10, 12, 14, 16] target = 10 result = binary_search(arr, target) if result != -1: print("目标元素在数组中的索引为:", result) else: print("目标元素不在数组中") ``` 以上代码实现了`binary_search`函数,该函数接受一个有序数组`arr`和目标元素`target`作为输入,返回目标元素在数组中的索引。若目标元素不在数组中,则返回-1。函数内部使用`left`和`right`两个指针来确定每次查找的区间范围,通过不断缩小区间来逐步逼近目标元素。最后,根据返回的结果判断目标元素是否在数组中,并输出相应结果。 在以上示例中,`arr`为有序数组`[2, 4, 6, 8, 10, 12, 14, 16]`,`target`为10。根据二分查找算法,函数返回的结果为4,即10在数组中的索引位置。最后,输出结果为"目标元素在数组中的索引为: 4"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值