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实现根据IP地址和子网掩码算出网段的方法
Jul 30 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 Python
python去除扩展名的实例讲解
Apr 23 Python
python库lxml在linux和WIN系统下的安装
Jun 24 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
pandas 透视表中文字段排序方法
Nov 16 Python
python实现将汉字保存成文本的方法
Nov 16 Python
Python使用py2neo操作图数据库neo4j的方法详解
Jan 13 Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 Python
简述python&amp;pytorch 随机种子的实现
Oct 07 Python
关于探究python中sys.argv时遇到的问题详解
Feb 23 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系统流量分析的程序
2006/10/09 PHP
js下函数般调用正则的方法附代码
2008/06/22 PHP
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python 第一步 hello world
2009/09/25 Python
Python切片用法实例教程
2014/09/08 Python
Python函数式编程
2017/07/20 Python
python3设计模式之简单工厂模式
2017/10/17 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
python实现飞行棋游戏
2020/02/05 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
想学画画?python满足你!
2020/12/24 Python
HTML利用九宫格原理进行网页布局
2020/03/13 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
英国最大的海报商店:GB Posters
2018/03/20 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
mysql有关权限的表都有哪几个
2015/04/22 面试题
学习两会精神心得范文
2014/03/17 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL