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以环状形式组合排列图片并输出的方法
Mar 17 Python
python根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
pygame学习笔记(1):矩形、圆型画图实例
Apr 15 Python
python使用htmllib分析网页内容的方法
May 08 Python
Python抓取淘宝下拉框关键词的方法
Jul 08 Python
Python入门必须知道的11个知识点
Mar 21 Python
浅谈Python的list中的选取范围
Nov 12 Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 Python
Python的条件锁与事件共享详解
Sep 12 Python
查看keras的默认backend实现方式
Jun 19 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 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数组的使用方法小结
2010/09/23 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
php封装的验证码类分享
2017/02/26 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
JavaScript中的类数组对象介绍
2014/12/30 Javascript
jquery.cookie.js使用指南
2015/01/05 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
python中数据爬虫requests库使用方法详解
2018/02/11 Python
Python 修改列表中的元素方法
2018/06/26 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
公司清洁工岗位职责
2013/12/14 职场文书
大学生活动策划方案
2014/02/10 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
骨干教师考核方案
2014/05/09 职场文书
法定代表人资格证明书
2014/09/11 职场文书
2014年宣传工作总结
2014/11/18 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang