Python如何实现的二分查找算法


Posted in Python onMay 27, 2020

先来看个用Python实现的二分查找算法实例

import sys 
def search2(a,m): 
 low = 0 
 high = len(a) - 1 
 while(low <= high): 
  mid = (low + high)/2
  midval = a[mid] 
   
  if midval < m: 
   low = mid + 1 
  elif midval > m: 
   high = mid - 1 
  else: 
   print mid 
   return mid 
 print -1
 return -1
if __name__ == "__main__": 
 a = [int(i) for i in list(sys.argv[1])] 
 m = int(sys.argv[2]) 
 search2(a,m)om/weixin.html#_labeldown

运行:

administrator@ubuntu:~/Python$ python test_search2.py 123456789 4

注:

1.'__':由于python的类成员都是公有、公开的被存取public,缺少像正统面向对象语言的私有private属性。

于是就用__来将就一下,模拟私有属性。这些__属性往往是内部使用,通常情况下不用改写。也不用读取。

加上2个下划线的目的,一是不和普通公有属性重名冲突,二是不让对象的使用者(非开发者)随意使用。

2.__name__ == "__main__"表示程序脚本是直接被执行的.

如果不等于表示脚本是被其他程序用import引入的.则其__name__属性被设为模块名

Python采用二分查找找出数字的下标

要考虑有重复数字的情况

class Solution(object):
 def searchRange(self, nums, target):
  """
  :type nums: List[int]
  :type target: int
  :rtype: List[int]
  def binary_search(start,end,value):
   while end>=start:
    mid = (start+end)//2
    print(mid)
    if nums[mid]>target:
     end = mid-1
    elif nums[mid]<target: start="mid+1" else:="" if="" value="=-1:" mid-1="">=start and nums[mid+value] == target:
       end = mid+value
      else:
       return mid
     else:
      if mid+1<=end and nums[mid+value] == target:
       start = mid+value
   return -1
  a=binary_search(0,len(nums)-1,-1)
  b=binary_search(0,len(nums)-1,1)
  return [a,b]
a = Solution()
l = [2,2]
print(a.searchRange(l,2))
 
</target:>

二分算法的定义不在多说了

import sys 
source = [1,2,3,4,5,6,7,8,9,10] #must be in order 
des = int(sys.argv[1]) 
low = 0
high = len(source) - 1
targetIndex = -1
print "des=",des 
while low <= high: 
 middle = (low + high)/2
 if des == source[middle]: 
  targetIndex = middle 
  break
 elif des < source[middle]: 
  high = middle -1
  print "middle element[index=",middle,",value=",source[middle],"] is bigger than des, continue search from[",low,"to",high,"]"
 else: 
  low = middle + 1
  print "middle element[index=",middle,",value=",source[middle],"] is smaller than des, continue search from[",low,"to",high,"]"
print "search complete, target element's index in source list is ",targetIndex

最后在分享一个

'fileName--BinarySearch.py'

src = [] 
def BinarySearch(low, high, target, *src): 
 '二分查找'
 while low <= high: 
  mid = (low + high) // 2
  midVal = src[mid] 
  if target < midVal: 
   high = mid - 1
  elif target > midVal: 
   low = mid + 1
  else: 
   return mid 
  BinarySearch(low, high, target, *src) 
print('Please input 10 number:') 
for number in range(10): 
 src.append(int(input('Num %d:' % number))) 
sortList = tuple(src) 
key = int(input('Please input key:')) 
location = BinarySearch(0, len(src) - 1, key, *sortList) 
if location != None: 
 print('Find target at %d' % (location + 1)) 
else: 
 print('No target!')

实例补充

#!/usr/bin/python env
# -*- coding:utf-8 -*-

def half_search(array,target):
 low = 0
 high = len(array) - 1
 while low < high:
   mid = (low + high)/2
   if array[mid] > target:
   high = mid - 1
   elif array[mid] < target:
   low = mid + 1
   elif array[mid] == target:
   print 'I find it! It is in the position of:',mid
   return mid
   else:
   print "please contact the coder!"
 return -1

if __name__ == "__main__":
 array = [1, 2, 2, 4, 4, 5]

运行结果如下:

I find it! It is in the position of: 4
4
-1
I find it! It is in the position of: 0
0
-1

以上就是Python如何实现的二分查找算法的详细内容,更多关于用Python实现的二分查找算法的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
在Python中使用SQLite的简单教程
Apr 29 Python
微信跳一跳小游戏python脚本
Jan 05 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
Feb 03 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
python脚本监控Tomcat服务器的方法
Jul 06 Python
python爬虫框架scrapy实现模拟登录操作示例
Aug 02 Python
详解python的argpare和click模块小结
Mar 31 Python
python使用 zip 同时迭代多个序列示例
Jul 06 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
pytorch掉坑记录:model.eval的作用说明
Jun 23 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
May 27 #Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 #Python
Python列表如何更新值
May 27 #Python
Python模拟伯努利试验和二项分布代码实例
May 27 #Python
基于python纯函数实现井字棋游戏
May 27 #Python
Python实现读取并写入Excel文件过程解析
May 27 #Python
Python正则表达式如何匹配中文
May 27 #Python
You might like
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
新闻内页-JS分页
2006/06/07 Javascript
javascript 写类方式之三
2009/07/05 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
canvas的神奇用法
2017/02/03 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
Python3中的真除和Floor除法用法分析
2016/03/16 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
django 环境变量配置过程详解
2019/08/06 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
营销部内勤岗位职责
2014/04/30 职场文书
欠条格式范本
2015/07/03 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
python内置模块之上下文管理contextlib
2022/06/14 Python
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技