对未排序列表进行二进制搜索

编程入门 行业动态 更新时间:2024-10-25 11:31:00
本文介绍了对未排序列表进行二进制搜索的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我需要对一个数字列表使用二进制搜索,并让它返回该数字的索引。在列表未排序的情况下如何执行此操作?我需要返回未排序列表的索引,而不是排序列表。

推荐答案

您需要对列表的副本进行排序,并将索引列表维护回原始列表。

一种方法是使用decorate-sort-undecorate idiom:

>>> values = [5, 2, 7] >>> decorated = list(zip(value, range(len(values)))) >>> sorted_decorated = sorted(decorated) >>> sorted_values, indices = list(zip(sorted_decorated)) >>> sorted_values [2, 5, 7] >>> indices [1, 0, 2]

然后您可以对排序值执行二进制搜索,您就可以将索引映射回原始索引。

您可以使用bisect模块implement binary search:

def index(a, x): 'Locate the leftmost value exactly equal to x' i = bisect_left(a, x) if i != len(a) and a[i] == x: return i raise ValueError

使用它:

>>> index(sorted_values, 5) 1

因此原始索引为:

>>> indices[1] 0

更多推荐

对未排序列表进行二进制搜索

本文发布于:2023-11-30 10:53:15,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1649717.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:列表

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!