Python实现二分查找算法

二分查找

二分查找又叫折半查找,二分查找应该属于减治技术的成功应用。所谓减治法,就是将原问题分解成若干个子问题后,利用了规模为n的原问题的解与较小规模(通常是n/2)的子问题的解之间的关系。
二分查找利用了记录按关键码有序的特点,其基本思想为:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键码相等,则查找成功;若给定值小于中间记录的关键码,则在中间记录的左半边继续查找;若给定值大于中间记录的关键码,则在中间记录右半边区继续查找。不断重复上述过程,直到查找成功,或所查找的区域无记录,查找失败。
二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。

下图是二分查找的减治思想:

二分查找

如果k< rmid查找这边 如果k> rmid查找这边
例如:
在有序列表list1中[1, 3, 8, 12, 23, 31, 37, 42, 48, 58]中查找值为8的记录的。

伪代码:

1.low = 0; high = len(list1]-1 #设置初识查找区间
2.测试查找区间[low, high]是否存在,若不存在,则查找失败;否则
3.取中间mid=(low + high)/2;比较k与list1[mid],有以下三种情况:
  3.1 若k<r[mid],则high=mid-1;查找在左半区进行,转2;
  3.2 若k>r[mid],则low=mid+1;查找在右半边区进行,转2;
  3.3 若k=r[mid],则查找成功,返回记录在表中位置mid;

Python实现二分查找算法,代码如下:

#!/usr/bin/python
#coding=utf-8

#自定义函数,实现二分查找,并返回查找结果
def binary_search(find, list1) :
  low = 0
  high = len(list1) - 1
  while low <= high :
    mid = (low + high) // 2
    if list1[mid] == find :
      return mid
    #左半边
    elif list1[mid] > find :
      high = mid -1
    #右半边
    else :
      low = mid + 1
  #未找到返回-1
  return -1

list1 = [1,2,3,7,8,9,10,5]
#进行二分查找算法前必须保证要查找的序列时有序的,这里假设是升序列表
list1.sort()

print "原有序列表为:",list1
try :
  find = int(raw_input("请输入要查找的数:"))
except :
  print "请输入正整数!"
  exit()

result = binary_search(find, list1)
if result != -1 : 
  print "要找的元素%d的序号为:%d" %(find,result)
else :
  print "未找到!"
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值