You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Binary Search(二分查找)查询无法返回正确结果始终返回False问题排查

代码核心错误点

  • 初始调用的r参数传值错误:你传入的是列名字符串的长度len('Publication date (standardised)')-1,而非目标列有效数据的总长度,搜索范围远小于实际数据集,自然无法匹配到目标值
  • 缩进逻辑错误:二分查找的匹配判断、递归调用代码没有缩进在if r >= l代码块内,当r < l时仍会执行后续逻辑,此时mid未定义,会触发运行异常
  • 冗余操作过多:每次递归都会重新读取CSV、生成并排序列表,不仅运行效率极低,还增加了文件IO异常的概率
  • 排序逻辑位置错误:sorted_list赋值放在for循环内部,每新增一个元素就执行一次排序,属于完全不必要的重复计算

修正后代码

import csv

def BinarySearch(sorted_list, l, r, keyword):
    if r >= l:
        mid = l + (r - l) // 2
        if sorted_list[mid] == int(keyword):
            return mid
        elif sorted_list[mid] > int(keyword):
            return BinarySearch(sorted_list, l, mid - 1, keyword)
        else:
            return BinarySearch(sorted_list, mid + 1, r, keyword)
    else:
        return -1

# 提前读取CSV并生成排序后的目标列列表,避免重复操作
def get_sorted_column(filename, column):
    newlist = []
    with open(filename, newline='', encoding="utf-8-sig") as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            if row[column] != "":
                newlist.append(int(row[column]))
    return sorted(newlist)

if __name__ == "__main__":
    sorted_dates = get_sorted_column('bl_printed_music_500.csv', 'Publication date (standardised)')
    keyword = input("Enter your keyword: ")
    # 初始r参数传排序后列表的最大索引
    result = BinarySearch(sorted_dates, 0, len(sorted_dates)-1, keyword)
    print(result != -1)

内容的提问来源于stack exchange,提问作者Sasha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:07