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之玩转字符串(2)
Sep 14 Python
Python中exit、return、sys.exit()等使用实例和区别
May 28 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
Python3爬虫全国地址信息
Jan 05 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
Python使用xpath实现图片爬取
Sep 16 Python
Python使用pycharm导入pymysql教程
Sep 16 Python
python 实现aes256加密
Nov 27 Python
Pytest之测试命名规则的使用
Apr 16 Python
用python修改excel表某一列内容的操作方法
Jun 11 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执行linux系统命令的常用函数使用说明
2010/04/27 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
python中使用序列的方法
2015/08/03 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
PyQt5实现简易计算器
2020/05/30 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
中学教师培训制度
2014/01/31 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
安全目标责任书
2014/07/22 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
先进典型事迹材料
2014/12/29 职场文书
讲座通知范文
2015/04/23 职场文书
庆七一主持词
2015/06/29 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python