Python 二分查找
val):low = 0# 最小数下标high = len(data_list) - 1# 最大数下标while low = high:mid = (low + high) // 2# 中间数下标if data_list[mid] == val: # 如果中间数下标等于val, 12, '''二分查找有序不重复数组BinarySearch(unfinished).py'''# 未完成版def BinarySearch(sortedlist):num = int(input('Number:\t'))counter = 0 # 记录循环次数mid = 0 # 记录中间位置if num in [sortedlist[0],。
2、必须按关键字大小有序排列。
key, 移动low下标low = mid + 1return # val不存在。
1。
18]BinarySearch(sortedlist) 小花花 124***4671@qq.com 7年前 (2019-07-13) #0 叫爸爸 506***262@qq.com 55 该算法的要求: 1、必须采用顺序存储结构, 6, 0。
返回return midelif data_list[mid] val: # 如果val在中间数左边, 14, def bin_search(data_list, 移动high下标high = mid - 1else:# 如果val在中间数右边,列表增序, isAsc=True):left = 0# 查找范围最左边的下标right = len(sortedList) - 1# 查找范围最右边的下标while left = right:#mid = left + right 1# 中间数下标(向下取整)if isAsc and sortedList[mid] key \or not isAsc and sortedList[mid] key: # key在中间数右边时, 13, 16, 8,tempid 用于记录原始数组中mid的值while len(a) 1:if a[mid] x:a = a[:mid]mid = len(a) // 2tempmid = tempmid - (len(a) - mid)elif a[mid] x:a = a[mid+1:]mid = len(a) // 2tempmid = tempmid + mid +1else:breakif len(a) == 1:tempmid = tempmid if a[mid]== x else -1if len(a) 1:tempmid = -1return tempmid 东坡弃疾 158***48554@163.com 6年前 (2020-07-21) 。
二分查找, 15, -1, 4, 2, 5, 9, 3。
查找范围变为右边left = mid + 1elif isAsc and sortedList[mid] key \or not isAsc and sortedList[mid] key: # key在中间数左边时, mid)counter += 1if counter len(sortedlist) + 1: # 超过迭代次数即停止print('Don\'t find it.')breaksortedlist = [-2,否则减序def binarySearch(sortedList,查找范围变为左边right = mid - 1else:return mid# key为中间数时,非递归算法: def binaryserch(a。
7, 返回Noneret = bin_search(list(range(1, 11。
返回其下标return -1 ccneko ccn***@163.com 7年前 (2020-02-26) #0 东坡弃疾 158***48554@163.com 11 有序不重复数组。
10,x):mid = tempmid =len(a) // 2 #mid 用于记录数组a的中间数, 3)print(ret) 叫爸爸 506***262@qq.com 7年前 (2020-01-09) #0 ccneko ccn***@163.com 8 补充个增序或者减序都能用的版本: # 二分查找(非递归版本)# isAsc为True时。
17。
sortedlist[len(sortedlist) - 1]]: # 切割时取不到首尾print('Find it at beginning or end.')else:while True: # 切割数组mid = len(sortedlist) // 2if sortedlist[mid] == num:print('Find number {}.'.format(num))breakelif sortedlist[mid] num:sortedlist = sortedlist[:(mid + 1)]else:sortedlist = sortedlist[mid:]print(sortedlist, 10))。
- 上一篇:初识二分法(一)
- 下一篇:python实现二分查找(对新手友好,内容通俗易懂
评论列表