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使用MD5加密字符串示例
Aug 22 Python
跟老齐学Python之不要红头文件(2)
Sep 28 Python
python实现调用其他python脚本的方法
Oct 05 Python
Python中的多行注释文档编写风格汇总
Jun 16 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
django反向解析和正向解析的方式
Jun 05 Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 Python
python里运用私有属性和方法总结
Jul 08 Python
Python 的AES加密与解密实现
Jul 09 Python
Python模块相关知识点小结
Mar 09 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 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
提取HTML标签
2006/10/09 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
PHP操作Redis数据库常用方法示例
2018/08/25 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
不安全的常用的js写法
2009/09/15 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
解决python升级引起的pip执行错误的问题
2018/06/12 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
python函数与方法的区别总结
2019/06/23 Python
基于python操作ES实例详解
2019/11/16 Python
python实现控制台输出彩色字体
2020/04/05 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
暑假实习求职信范文
2013/09/22 职场文书
法学毕业生自荐信
2013/11/13 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
捐书仪式主持词
2015/07/04 职场文书
技能培训通讯稿
2015/07/18 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
Python实现仓库管理系统
2022/05/30 Python