如何在给定Python代码框架中实现二分查找?实验需求存疑
实现二分查找的Searcher类方案
你需要创建一个Searcher.py文件,实现静态方法binary_search,利用传入的comparer对象的compare方法统一处理字符串和数字的比较逻辑,无需直接操作元素的大小比较。
完整的Searcher类代码
class Searcher: @staticmethod def binary_search(sorted_list, search_key, comparer): left = 0 right = len(sorted_list) - 1 while left <= right: mid = (left + right) // 2 # 通过比较器获取元素与搜索键的比较结果 compare_result = comparer.compare(sorted_list[mid], search_key) if compare_result == 0: # 找到目标,返回对应索引 return mid elif compare_result == -1: # 中间元素小于搜索键,调整左指针到右侧继续查找 left = mid + 1 else: # 中间元素大于搜索键,调整右指针到左侧继续查找 right = mid - 1 # 遍历结束未找到目标,返回-1 return -1
补充NumComparer类实现
主文件中导入了NumComparer但未提供代码,需创建NumComparer.py文件,实现与StringComparer一致的接口:
class NumComparer: def compare(self, num1, num2): if num1 < num2: return -1 elif num1 > num2: return 1 else: return 0
实现逻辑说明
- 指针初始化:
left指向列表起始位置,right指向列表末尾位置 - 循环查找:只要
left不超过right,就计算中间索引mid - 比较调整指针:
- 比较结果为0:找到目标,返回当前中间索引
- 比较结果为-1:中间元素比搜索键小,将左指针移到
mid+1,在右侧子列表继续查找 - 比较结果为1:中间元素比搜索键大,将右指针移到
mid-1,在左侧子列表继续查找
- 未找到处理:循环结束仍未匹配到目标,返回-1
将上述三个文件(Searcher.py、NumComparer.py、StringComparer.py)和你的主文件放在同一目录下运行,即可通过所有测试用例。
内容的提问来源于stack exchange,提问作者Tristan Laquindanum
相关产品推荐
相关产品推荐

