二分查找(非递归、递归)python实现
递归,二分,查找,python,实现
2025-04-01 16:27:58 时间
# -*- coding: utf-8 -*-
"""
@author: sato
@file: binary_search.py
@time: 2019-09-03 15:21
"""
def binary_search(array, key):
"""二分查找非递归"""
if len(array) <= 1:
if array[0] != key:
return
start = 0
end = len(array) - 1
while start <= end:
mid = (end + start) // 2
if key < array[mid]:
end = mid - 1
elif key > array[mid]:
start = mid + 1
else:
return True
def binary_search(a, b):
"""非递归"""
min = 0
max = len(a) - 1
if b in a:
while True:
centre = int((max + min) / 2)
if a[centre] > b:
max = centre - 1
elif a[centre] < b:
min = centre + 1
elif a[centre] == b:
return centre
else:
return 'b in not in a'
def binary_search_reduce(array, key):
"""二分查找,递归实现版本"""
if len(array) == 0:
return False
mid = len(array) // 2
if array[mid] == key:
return True
elif key < array[mid]:
return binary_search_reduce(array[:mid], key)
else:
return binary_search_reduce(array[mid + 1:], key)
if __name__ == '__main__':
# 二分查找的最优时间复杂度为O(1),最坏时间复杂度为O(log n)
# 递归空间复杂度是:O(N) 非递归: O(1)
# 使用场景: 在有序数组中寻找指定元素
sorted_list = [1, 4, 5, 7, 8, 9, 10, 13, 15, 17, 19, 23, 35]
assert binary_search(sorted_list, 1)
assert binary_search(sorted_list, 10)
assert binary_search(sorted_list, 35)
assert binary_search_reduce(sorted_list, 1)
assert binary_search_reduce(sorted_list, 13)
assert binary_search_reduce(sorted_list, 35)
相关文章
- Python 一网打尽<排序算法>之从玩转冒泡排序开始
- 用Python写一个百度POST实时推送工具
- 一口气用Python写了13个小游戏(附源码)
- python进制转换函数
- 【Python】QQ查IP工具
- python实现微信小游戏“飞机大战”
- python不报错但计算不出结果_excel表格不能用公式怎么办
- 基于python的安全帽识别安全帽检测可以检测图片,视频流,有界面[通俗易懂]
- Python开发者必知的13个Python GUI库
- python interpolate.interp1d_索引错误scipy.interpolate.interp1d「建议收藏」
- python lambda拉姆达表达式「建议收藏」
- Python:Flask使用jsonify格式化时间
- 使用 python 执行 shell 命令的几种常用方式
- pythoncharm注释快捷键_多行注释以什么开头
- Python语音信号处理
- 手把手教你用Python破解邻家小妹wifi密码
- 用Python实现开心消消乐小游戏
- 用Python画个生日蛋糕为朋友庆生
- maven找不到包但是确实引入了_idea写python好吗
- Python带你跨年!用Python送你一场跨年烟花秀