二分查找
Posted 在这里, 意淫和实干都值得尊重
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找相关的知识,希望对你有一定的参考价值。
?二分查找:
前提条件:
二分查找只能在有序的列表内进行查找
基本思想
1. 在一个有序的列表内,查找你想要的数字.
2. 先设定起始下标,与结束下标,然后取出中间下标的值
3. 让中间坐标的值,与要查找的值进行比对
1.如果中间值等于要查找的值,直接返回中间值
2.如果中间值,小于要查找的值,那么将中间值的下标加一,作为下一次查找的起始下标
3.如果中间值,大于要查找的值,那么将中间值的下标减一作为下一次查找的终止下标
4. 按照此原理直到找到为止
精简版:
def bin_search(data, find_num): first = 0 last = len(data)-1 while first <= last: mid = (first+last)//2 if data[mid] == find_num: return mid if data[mid] < find_num: first = mid + 1 if data[mid] > find_num: last = mid - 1
注释版:
def bin_search(data, find_num): # 起始下标 first = 0 # 终止下标 last = len(data)-1 # 如果这个序列不为空就要一直查找 while first <= last: # 设置中间下标, mid = (first+last)//2 # 如果中间的数, 等于要查找的数, 返回这个数的下标 if data[mid] == find_num: return mid # 如果中间的数, 小于要查找的数, 将中间数的下标加一, 作为下一步要查找的起始下标 if data[mid] < find_num: first = mid + 1 # 如果中间的数, 大于要查找的数, 将中间数的下标减一, 作为下一步要查找的末尾下标 if data[mid] > find_num: last = mid - 1
递归版:
def bin_search(data, find_num): first = 0 last = len(data) - 1 mid = (first + last) // 2 if data[mid] == find_num: return mid elif data[mid] < find_num: bin_search(data, mid + 1, find_num) else: bin_search(data, first, mid - 1)
以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章