Python学习笔记之二分查找

最后都变了- 提交于 2019-11-29 16:37:22

1、问题: 二分查找分数所在位置

二分查找分数所在位置

2、实现代码:

# 二分查找  递归方法实现
# 返回 x 在 arr 中的索引,如果不存在返回 -1
def binarySearch (arr, l, r, x): 

    # 基本判断
    if r >= l: 
  
        mid = int(l + (r - l)/2)
  
        # 元素整好的中间位置
        if arr[mid] == x: 
            return int(x),mid 
          
        # 元素小于中间位置的元素,只需要再比较左边的元素
        elif arr[mid] > x: 
            return binarySearch(arr, l, mid-1, x) 
  
        # 元素大于中间位置的元素,只需要再比较右边的元素
        else: 
            return binarySearch(arr, mid+1, r, x) 
  
    else: 
        # 不存在
        return -1,-1
  
arr = input()# 空格隔开
x = input()
arr = arr.split(" ")
# 函数调用
result,num = binarySearch(arr, 0, len(arr)-1, x) 
  
if result != -1: 
    print (str(result) + ' ' +str(num+1) ) # 元素在数组中的索引为 
else: 
    print ("")# 元素不在数组中

3、相关解释:

3.0 binarySearch()函数参数:

arr : 查找目标所在的数组
l : 左侧开始位置
r : 右侧结束位置
x : 查找目标

3.1 原理

二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。

二分法查找的思路如下:

(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。

(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。

(3)如果某一步数组为空,则表示找不到目标元素。

二分法查找的时间复杂度O(logn)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!