二分查找 àì夳堔傛蜴生んèń 2022-01-07 04:03 79阅读 0赞 ## 使用递归的版本 ## def bin_search(lst, num, start=None, end=None): """ 二分查找 :param lst: 列表 :param num: 目标元素 :param start: 查找的起始位置 :param end: 查找的终止位置 :return: 返回索引,找不到返回None """ start = start if start else 0 end = end if end else len(lst)-1 mid = (end - start)//2 + start if start > end: return None elif num == lst[mid]: return mid elif num < lst[mid]: bin_search(lst, num, start, mid-1) else: bin_search(lst, num, mid+1, end) 分查找的效率是很高的,因为每调用一次查找范围就减半,因此只需要很少的次数就可以找到目标元素。 为了查看函数调用的次数,写了一个简单的装饰器来输出函数递归调用的次数,完整代码如下: import time def call_num(func): """ 此装饰器函数用于计算函数调用次数 :param func: :return: """ num = 0 def inner(*args, **kwargs): nonlocal num ret = func(*args, **kwargs) num += 1 print("function called number:", num) return ret return inner @call_num def bin_search(lst, num, start=None, end=None): """ 二分查找 :param lst: 列表 :param num: 目标元素 :param start: 查找的起始位置 :param end: 查找的终止位置 :return: 返回索引,找不到返回None """ start = start if start else 0 end = end if end else len(lst)-1 mid = (end - start)//2 + start if start > end: return None elif num == lst[mid]: return mid elif num < lst[mid]: bin_search(lst, num, start, mid-1) else: bin_search(lst, num, mid+1, end) l1 = [] for i in range(100000000): l1.append(i) start_time = time.time() print(bin_search(l1, 83374292)) end_time = time.time() print(end_time-start_time) ## 不使用递归的版本 ## def bin_search(lst, item): start = 0 end = len(lst) - 1 # 利用循环代替递归 while start <= end: mid = (start+end)//2 if lst[mid] == item: return mid else: if lst[mid] < item: # 从mid+1开始,否则item为列尾时程序不会终止 start = mid+1 else: end = mid-1 转载于:https://www.cnblogs.com/zzliu/p/10679844.html
相关 二分查找 函数lower\_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置 举例 约定不等于承诺〃/ 2022年08月07日 14:47/ 0 赞/ 24 阅读
相关 二分查找 二分查找可以说是在经典不过的查找算法了,比如JAVA的库函数里,就有相应的代码实例。如下写出两个版本的二分查找,非递归和递归的 非递归的 public int bi 系统管理员/ 2022年08月06日 16:24/ 0 赞/ 35 阅读
相关 二分查找 //二分查找 /\ 递归算法 int searchB1(int A\[\], int low, int high, int data); 非递归算法 int 绝地灬酷狼/ 2022年05月12日 01:40/ 0 赞/ 20 阅读
相关 查找——二分查找 基本思想 二分查找是建立在有序顺序表基础上的!步骤如下: 1. 将表中间位置记录的关键字与给定K值进行比较,若两者相等,则查找成功。 2. 蔚落/ 2022年03月27日 03:46/ 0 赞/ 358 阅读
相关 二分查找 二分查找(先排序) typedef struct LNode List; struct LNode{ ElemenType Data[MAXSIZ 爱被打了一巴掌/ 2022年02月02日 17:13/ 0 赞/ 104 阅读
相关 二分查找 使用递归的版本 def bin_search(lst, num, start=None, end=None): """ 二分查找 àì夳堔傛蜴生んèń/ 2022年01月07日 04:03/ 0 赞/ 80 阅读
相关 二分查找 int search2( int array\[\], int n, int v) \{ int left, right, middle; 心已赠人/ 2021年12月20日 16:07/ 0 赞/ 94 阅读
相关 二分查找 二分查找 二分查找是一个比较简单的算法,用 C++ 语言实现如下: template <typename T> int binary_search( ゞ 浴缸里的玫瑰/ 2021年12月13日 03:57/ 0 赞/ 162 阅读
相关 二分查找 > 一、自己实现的 include<iostream> include<cstdio> include<algorithm> u 左手的ㄟ右手/ 2021年09月21日 17:12/ 0 赞/ 270 阅读
还没有评论,来说两句吧...