- 二分查找
- 二分查找得定义
- 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
- 二分查找的局限性
- 二分查找依赖得是顺序表结构
- 二分查找针对的是有序得数据
- 小数据量优势不大
- 因依赖顺序表结构,所以不太适合大量数据。因为连续得大内存空间比较少。
- 代码
- 二分查找
- #查找出mun在lis中的下标
- def run(lis,num):
- left = 0
- right = len(lis)-1
- while left <= right:
- middle = (right + left)//2
- if num == lis[middle]:
- return middle
- elif num < lis[middle]:
- right = middle - 1
- else:
- left = middle + 1
- return None
- 查找第一个与data相等的数据
- def run(lis, data):
- left = 0
- right = len(lis) - 1
- while left <= right:
- middle = (left + right)//2
- if data<= lis[middle]:
- right = middle - 1
- else:
- left = middle + 1
- if lis[left] == data:
- return left
- 查找最后一个与data相等得元素
- def run(lis,data):
- left = 0
- right = len(lis) - 1
- while left <= right:
- middle = (left + right)//2
- if data < lis[middle]:
- right = middle - 1
- else:
- left = middle + 1
- if lis[right] == data:
- return right
- 查找最后一个小于data的元素
- def run(lis,data):
- left = 0
- right = len(lis) - 1
- while left <= right:
- middle = (left + right)//2
- if data <= lis[middle]:
- right = middle - 1
- else:
- left = middle + 1
- if data == lis[left]:
- return left-1
- 查找第一个大于data的元素
- def run(lis,data):
- left = 0
- right = len(lis) - 1
- while left <= right:
- middle = (left + right)//2
- if data < lis[middle]:
- right = middle - 1
- else:
- left = middle + 1
- if data == lis[right]:
- return right+1
数据结构和算法----二分查找
最新推荐文章于 2022-05-02 16:38:44 发布