python实现二分查找

python实现二分查找

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

"""
    二分查找升序数组内某个值
"""

import os
import sys


class Solution(object):
    def search(self, nums, left, right, target):
        #找完了 return -1
        if left > right:
            return -1
        #就剩一个了,直接判断
        if left == right:
            return left if nums[left] == target else -1

        #转换int  int()
        mid = ( int(left) + int(right)) /2
        if nums[mid] == target:
            return mid

        #调用方法需要用self调用, 不用传入self
        return self.search(nums, 0, mid-1, target) if nums[mid] > target  else self.search(nums, mid+1, right, target)

    def Search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        #调用方法需要用self调用, 不用传入self
        #计算数组长度 len()
        return self.search(nums, 0, len(nums), target)


def main():
    #实例化类
    ca = Solution()
    #测试数据
    nums = [1,2,3,7,9,10]
    #调用类的方法
    result = ca.Search(nums, 9)
    print result

main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值