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多线程编程方式分析示例详解
Dec 06 Python
Pycharm设置界面全黑的方法
May 23 Python
python实现requests发送/上传多个文件的示例
Jun 04 Python
Python封装原理与实现方法详解
Aug 28 Python
在python中实现对list求和及求积
Nov 14 Python
Python动态赋值的陷阱知识点总结
Mar 17 Python
python elasticsearch从创建索引到写入数据的全过程
Aug 04 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
python3 assert 断言的使用详解 (区别于python2)
Nov 27 Python
py-charm延长试用期限实例
Dec 22 Python
Python创建空列表的字典2种方法详解
Feb 13 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 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/03/20 PHP
PHP5 字符串处理函数大全
2010/03/23 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
php Session无效分析资料整理
2016/11/29 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
express.js中间件说明详解
2019/03/19 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
微信小程序实现左滑动删除效果
2020/03/30 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
[03:00]2014DOTA2国际邀请赛 Titan淘汰潸然泪下Ohaiyo专访
2014/07/15 DOTA
python调用java的Webservice示例
2014/03/10 Python
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
python实现简单中文词频统计示例
2017/11/08 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
生物科学专业职业规划书范文
2014/02/11 职场文书
教师开学感言
2014/02/14 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
2015年新农合工作总结
2015/03/30 职场文书
2015年科室工作总结
2015/04/10 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫