在python中搜索未排序的元素列表

在python中搜索未排序的元素列表,python,search,Python,Search,除了二进制搜索,我们还有其他比较次数较少的算法吗。 进一步的二进制搜索将在已排序的列表上工作。如果元素未排序怎么办 如果元素数(=n)是一个大数字。如果我选择对其进行排序,然后对其进行二进制搜索,那么运行时间就会很长 还有其他选择吗。如果使用Timsort(Python的默认排序算法),排序的代价一般是O(n*log(n)),因此只有在执行多次搜索且数组没有新元素的情况下才值得排序,因为您必须重新排序,这会产生O(n)的代价 另一方面,由于您必须单独查看每个值,我认为没有更好的方法,除非您使用并

除了二进制搜索,我们还有其他比较次数较少的算法吗。 进一步的二进制搜索将在已排序的列表上工作。如果元素未排序怎么办

如果元素数(=n)是一个大数字。如果我选择对其进行排序,然后对其进行二进制搜索,那么运行时间就会很长

还有其他选择吗。

如果使用Timsort(Python的默认排序算法),排序的代价一般是O(n*log(n)),因此只有在执行多次搜索且数组没有新元素的情况下才值得排序,因为您必须重新排序,这会产生O(n)的代价


另一方面,由于您必须单独查看每个值,我认为没有更好的方法,除非您使用并行编程,这样多个线程可以同时查看不同的值。

尝试基准测试转换为集合的速度并使用“in”查找如果您只搜索一次列表,然后可以使用线性搜索
O(n)
。但是,如果您多次插入列表,则
O(nlogn)
排序是一次性开销&您的搜索将变成
O(logn)
。如果要检查集合成员身份,请尝试查看集合和bloom Filters之类的数据结构。为什么要在Python中使用快速排序?从理论上讲,快速排序是在最佳情况下实现
O(n*log(n))
的最快算法,我不认为这取决于您使用的编程语言…它取决于语言,因为语言中已经包含排序算法。Python的排序算法是Timsort,所以您必须自己实现快速排序。这是更多的工作,并且(除非用C实现)将比内置排序慢得多。加上Timsort有最好的情形O(n),并且它是稳定的。因此,如果在Python中使用快速排序,这会有很多缺点,我不明白为什么会有人这样做。好的,你说得对,在Python中使用默认算法是最快的方法,正如我所能检查到的,值得称赞。然而,平均时间仍然是o(n*logn),因此它不会影响总体答案。