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 相关文章推荐
Python 字符串中的字符倒转
Sep 06 Python
python生成验证码图片代码分享
Jan 28 Python
详解python中的线程
Feb 10 Python
详解分布式任务队列Celery使用说明
Nov 29 Python
用Python配平化学方程式的方法
Jul 20 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
ipython jupyter notebook中显示图像和数学公式实例
Apr 15 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
Apr 15 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
python3 简单实现组合设计模式
Jul 02 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 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
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
学习ExtJS form布局
2009/10/08 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
对Js OOP编程 创建对象的一些全面理解
2016/07/26 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
js实现密码强度检验
2017/01/15 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
python 装饰器功能以及函数参数使用介绍
2012/01/27 Python
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
python实现ipsec开权限实例
2014/11/11 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
Python补齐字符串长度的实例
2018/11/15 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
python生成特定分布数的实例
2019/12/05 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
毕业生如何写自我鉴定
2014/03/15 职场文书
销售岗位职责范本
2014/06/12 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
学校工会工作总结2015
2015/05/19 职场文书
初中英语教学反思范文
2016/02/15 职场文书