添加二分查找算法实现和测试

实现二分查找算法 binary_search,包含测试函数 test_binary_search
支持各种边界情况测试

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-26 16:38:31 +08:00
parent 0fac1aed54
commit 6e4e45addc

56
main.py Normal file
View File

@@ -0,0 +1,56 @@
def binary_search(arr, target):
"""
二分查找算法
返回目标值在数组中的索引,如果不存在则返回 -1
"""
left, right = 0, len(arr) - 1
while left <= right:
mid = left + (right - left) // 2 # 防止溢出
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
def test_binary_search():
"""测试二分查找函数"""
test_cases = [
# (数组, 目标值, 期望索引)
([1, 2, 3, 4, 5], 3, 2),
([1, 2, 3, 4, 5], 1, 0),
([1, 2, 3, 4, 5], 5, 4),
([1, 2, 3, 4, 5], 0, -1),
([1, 2, 3, 4, 5], 6, -1),
([], 5, -1),
([5], 5, 0),
([5], 3, -1),
([1, 3, 5, 7, 9], 7, 3),
([1, 3, 5, 7, 9], 2, -1),
]
all_passed = True
for i, (arr, target, expected) in enumerate(test_cases):
result = binary_search(arr, target)
if result == expected:
print(f"测试用例 {i + 1} 通过: binary_search({arr}, {target}) = {result}")
else:
print(f"测试用例 {i + 1} 失败: binary_search({arr}, {target}) = {result}, 期望 {expected}")
all_passed = False
if all_passed:
print("所有测试用例通过!")
else:
print("部分测试用例失败!")
return all_passed
if __name__ == "__main__":
# 运行测试
test_binary_search()