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下载Bing图片(代码)
Nov 07 Python
python实现超简单端口转发的方法
Mar 13 Python
Python基础教程之tcp socket编程详解及简单实例
Feb 23 Python
Python GUI编程 文本弹窗的实例
Jun 11 Python
Python CSV文件模块的使用案例分析
Dec 21 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
Python多线程Threading、子线程与守护线程实例详解
Mar 24 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
Apr 08 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
深入理解python多线程编程
Apr 18 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 fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
js获取图片大小的函数代码
2011/09/20 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
原生JS检测CSS3动画是否结束的方法详解
2019/01/27 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
python 装饰器的使用示例
2020/10/10 Python
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
用Python写一个for循环的例子
2016/07/19 面试题
党校自我鉴定范文
2013/10/02 职场文书
《赶海》教学反思
2014/04/20 职场文书
个人总结与自我评价
2014/09/18 职场文书
公司人事任命通知
2015/04/20 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
小学运动会报道稿
2015/07/22 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
导游词之河北邯郸
2019/09/12 职场文书
Ruby处理CSV数据方法详解
2022/04/18 Ruby