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中处理时间的几种方法小结
Apr 09 Python
python中常用的九种预处理方法分享
Sep 11 Python
Python中执行存储过程及获取存储过程返回值的方法
Oct 07 Python
python爬取微信公众号文章
Aug 31 Python
python将控制台输出保存至文件的方法
Jan 07 Python
python issubclass 和 isinstance函数
Jul 25 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
python调用支付宝支付接口流程
Aug 15 Python
python保存log日志,实现用log日志画图
Dec 24 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
python调用win32接口进行截图的示例
Nov 11 Python
Python 避免字典和元组的多重嵌套问题
Jul 15 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
php自定文件保存session的方法
2014/12/10 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
javascript高亮效果的二种实现方法
2008/09/14 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
python去掉空白行的多种实现代码
2018/03/19 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
Python变量类型知识点总结
2019/02/18 Python
更新修改后的Python模块方法
2019/03/03 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
python字典一键多值实例代码分享
2019/06/14 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
2014年乡镇安全生产工作总结
2014/12/02 职场文书
房屋产权证明书
2015/06/19 职场文书
小学教育见习总结
2015/06/23 职场文书
幼儿园保教工作总结2015
2015/10/15 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书
Python编写nmap扫描工具
2021/07/21 Python
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android