python 实现二分法查找

二分查找图

二叉树:

代码


#!/usr/bin/python
#-*-coding:utf-8-*-
#----------------------------------------------------------------------------------------
# to_do : binary find
# authors: zuoxingyu
# time : 2014-06-07
#----------------------------------------------------------------------------------------
loop=0 #二分次数
def binarySearch(lists,select):
global loop
loop=loop+1
is_none=False
if lists!=[]:
cen_num=len(lists)/2 #取命中值的INDEX
tlag=lists[cen_num] #命中值
lt_list=lists[0:cen_num] #取命中值左边的小数列表
gt_list=lists[cen_num+1:]#取命中值右边的大数列表
print tlag,lt_list,gt_list

if tlag==select: #命中,返回TRUE
is_none=True
return is_none
elif select > tlag: #查找值大于M命中值,再在右边大数列表里找
return binarySearch(gt_list,select)
elif select < tlag: #查找值小于命中值,再在左边小数列表里找
return binarySearch(lt_list,select)

return is_none

binarySearch([1,2,3,4,15,26,37,48,59],26)
print ‘loop:‘,loop

执行效果:


[[email protected] MEIZUdb]# python binary_search.py
15 [1, 2, 3, 4] [26, 37, 48, 59]
48 [26, 37] [59]
37 [26] []
26 [] []
loop: 4

python 实现二分法查找,布布扣,bubuko.com

时间: 2024-10-05 04:54:50

python 实现二分法查找的相关文章

Python实现二分法查找

#二分查找 def search_val(data_list, val): left = 0 right = len(data_list) - 1 while left <= right: mid = (left + right) // 2 if data_list[mid] == val: return mid elif data_list[mid] > val: right = mid - 1 else: left = mid + 1 return -1 data_list = [1, 2

python递归函数及二分法查找

函数的递归: 在一个函数的内部调用自己 死循环: 可以无限循环,不会停止 while True: print('我不是递归') 递归: 不是死循环,有最大循环深度 def story(): print('我是递归') story() story() 超过了递归的最大深度报错 RecursionError: maximum recursion depth exceeded while calling a Python object 官网上 源码中设置的递归深度: 1000自己实际测试递归深度: 9

python的算法:二分法查找(1)

1.什么是二分法查找: 1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较. 3.如果在某一步骤数组为空,则代表找不到. 每次都是i减半查找,其时间消耗为O(logn) 最简单的一个循环算法就是: def binary_search_loop(lst,value): low,high=0,len(value)-1 while low<=high: mid=

python使用二分法实现在一个有序列表中查找指定的元素

二分法是一种快速查找的方法,时间复杂度低,逻辑简单易懂,总的来说就是不断的除以2除以2... 例如需要查找有序list里面的某个关键字key的位置,那么首先确认list的中位数mid,下面分为三种情况: 如果 list[mid] < key,说明key 在中位数的 右边: 如果 list[mid] > key,说明key 在中位数的 左边: 如果 list[mid] = key,说明key 在中位数的中间: 范围每次缩小一半,写个while的死循环知道找到为止. 二分法查找非常快且非常常用,但

Python 二分法查找

使用二分法查找前提必须是有序的数列 def search(list,val): start = 0 end = len(list)-1 #判断该数在不在列表中 if val in list: #循环直到找到该数,return退出函数 while 1: mid = int((start + end)/2) #取整数部分 if list[mid] == val: print('你要查找的数的下标为:%s,'%mid) return mid elif list[mid] > val: end = mi

python一个关于二分法查找元素的实现

# coding=utf-8import time def find_ele(alist, ele): if ele < alist[0] or ele > alist[len(alist) - 1]: print("%d not in alist" % ele) return last_index = len(alist) - 1 center_index = last_index // 2 loop_flag = True loop_cout = 0 while loo

python之路---14 递归 二分法查找

三十二.递归 1.函数自己调用自己 2.官方说明最大深度1000,但跑不到1000,要看解释器, 实测998 3.使?递归来遍历各种树形结构 三十三.    二分法查找 掐头结尾取中间 ,  必须是有序序列 1. 2. 3. 4. 原文地址:https://www.cnblogs.com/amirky/p/10211564.html

利用python实现二分法

利用python实现二分法:我的实现思路如下 1.判断要查找的值是否大于最大值,如果大于则直接返回False 2.判断要查找的值是否小于最小值,如果小于则直接返回False 3.如果要查找的值在最大值和最小值之间,则进入循环 a.首先序列的长度要大于1,然后获取序列中间一个值的大小 b.然后和要查找的值做比较,如果相等,则直接返回True,如果不相等,则判断如果中间的值大于要查找的值,则说明要查找的值在该中间值的左边,如果中间的值小于要查找的值,则说明要查找的值在中间的值的右边 c.最后如果序列

python实现二分查找

二分法查找:在一组有序的数据中进行查找,首先与中间的数先比较,如果查找的数大于中间的数,则要查找的数在前半段,否则在后半段,这样就会排除一半的数据,如此递归进行下去,则会极大的提高查找的速度.下面利用python代码实现二分查找 def binary_search(array,key): low = 0 high = len(array) - 1 while low < high: mid = int((low + high)/2) if key < array[mid]: high = mi