二分法查找算法

二分法查找

步骤:(设置查找的序列为L=[1,2,3,5,10,20,30],要查找的数字是20)

  1. 确定该期间的中间位置K,设最低位索引为low,最高位high
  2. 将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:

             1)array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]
        2)array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间缩小一半。递归找,即可

 

python代码如下:

 1 # -*- coding: utf-8 -*-
 2 """
 3 -------------------------------------------------
 4    File Name:     1
 5    Description :
 6    Author :       dcl
 7    date:          2018/1/31
 8 -------------------------------------------------
 9    Change Activity:
10                    2018/1/31:
11 -------------------------------------------------
12 """
13 
14 
15 def binarySearch(nums , key):
16     low = 0
17     high = len(nums) - 1
18 
19     while low < high:
20         mid = (high + low) / 2
21         if nums[mid] < key:
22             low = mid + 1
23         elif nums[mid] > key:
24             high = mid - 1
25         else:
26             return [mid,nums[mid]]
27 
28 if __name__ == "__main__":
29     print binarySearch([1,2,3,4,33,44,45,65],45)

 

转载于:https://www.cnblogs.com/chengfeng123/p/8395108.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值