Python实现二分查找

二分查找

二分查找又称折半查找,优点是比较次数少、查找速度快、平均性能好;其缺点是要求待查表为有序表,且插入删除困难,因此折半查找适用于不经常变动而查找频繁的有序序列。其算法思想是将表中中间位置记录的关键字与要查找的关键字比较,如果两者相等则查找成功,否则利用中间位置将表分成前、后两个子表。如果中间记录的关键字大于查找关键字,则进一步查找前一字表,否则进一步查找后一子表。重复以上过程,直到满足条件则查找成功,否则查找失败。

算法实现

# -*- coding: utf-8 -*-


def binary_search(array, val):
    """二分查找"""
    length = len(array)

    if length > 0:
        mid = length // 2
        if array[mid] == val:
            return True
        elif array[mid] < val:
            return binary_search(array[mid+1:], val)
        else:
            return binary_search(array[:mid], val)

    return False


if __name__ == '__main__':

    arr = [1,2,3,4,5,6,7,8,9]
    print(binary_search(arr, 0)) # False
    print(binary_search(arr, 1)) # True

 

### 回答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、付费专栏及课程。

余额充值