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让图片按照exif信息里的创建时间进行排序的方法
Mar 16 Python
Python快速查找list中相同部分的方法
Jun 27 Python
Linux下python制作名片示例
Jul 20 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
Jan 04 Python
在Pycharm中修改文件默认打开方式的方法
Jan 17 Python
Python 移动光标位置的方法
Jan 20 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
python对常见数据类型的遍历解析
Aug 27 Python
基于python+selenium的二次封装的实现
Jan 06 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
Python基于pandas爬取网页表格数据
May 11 Python
如何在Windows中安装多个python解释器
Jun 16 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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
CentOS安装php v8js教程
2015/02/26 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
php实现倒计时效果
2015/12/19 PHP
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
js charAt的使用示例
2014/02/18 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
javascript截取字符串小结
2015/04/28 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
详解js获取video任意时间的画面截图
2019/04/17 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
Javascript实现关闭广告效果
2021/01/29 Javascript
Python使用爬虫猜密码
2016/02/19 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
flask框架中的cookie和session使用
2021/01/31 Python
小学生作文评语
2014/04/18 职场文书
酒店管理求职信
2014/06/09 职场文书
教室布置标语
2014/06/26 职场文书
会计试用期自我评价
2014/09/19 职场文书
婚庆司仪开场白
2015/05/29 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书
Python面向对象之内置函数相关知识总结
2021/06/24 Python