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

能否对无序列表执行Binary Search?若可行,请提供实现代码示例

无序列表能否执行二分查找?

直接对无序列表执行二分查找不可行。二分查找的核心逻辑依赖于列表的有序性:每次通过中间元素与目标值的大小比较,能确定目标值必然存在于左半区或右半区,从而快速缩小查找范围。无序列表不具备这种特性,强行执行会导致查找结果完全不可靠。

如果要基于二分查找的思路处理无序列表,必须先对列表进行排序,但排序会改变原列表的元素顺序——若仅需判断目标值是否存在,可直接排序后查找;若需要获取目标值在原列表中的索引,则需在排序时保留原索引信息。

实现代码示例

仅判断目标值是否存在(不保留原索引)

def binary_search_unsorted(arr, target):
    # 先对无序列表排序
    sorted_arr = sorted(arr)
    left, right = 0, len(sorted_arr) - 1
    
    while left <= right:
        mid = (left + right) // 2
        if sorted_arr[mid] == target:
            return True  # 找到目标值
        elif sorted_arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return False  # 未找到目标值

获取目标值在原列表中的索引

def binary_search_unsorted_with_index(arr, target):
    # 排序时保留元素的原索引
    sorted_items = sorted((val, idx) for idx, val in enumerate(arr))
    left, right = 0, len(sorted_items) - 1
    
    while left <= right:
        mid = (left + right) // 2
        mid_val, mid_idx = sorted_items[mid]
        
        if mid_val == target:
            # 若有重复元素,此处仅返回第一个匹配的原索引,需全部索引可扩展逻辑
            return mid_idx
        elif mid_val < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1  # 未找到目标值

内容的提问来源于stack exchange,提问作者Victor-L-S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:15:46