二进制搜索的两个前提条件是什么?

时间:2011-10-03 06:27:22

标签: c binary-search

我在接受采访时被问到二进制搜索的两个先决条件。我告诉他们数组应该按升序排序,但我不知道二进制搜索的第二个前提条件是什么?

任何人都可以告诉我二进制搜索的第二个前提条件吗?

6 个答案:

答案 0 :(得分:3)

数据数组应进行排序,并按右侧顺序排序。即:当二进制搜索采用降序排列时,如果按升序排序 - 它将不起作用。

一些澄清,因为似乎人们忘记了他们的算法101.

前提是一个条件,如果不满足,则不需要算法来提供正确的结果。

随机访问不是二进制搜索算法的前提条件,因为它可以并且应该返回正确的答案,即使随机访问不可用(二进制搜索树依赖于此)。

小于运算符当然不必定义,因为它是特定于语言的实现细节。但它接近事实。

数据结构必须对除线性以外的任何搜索进行排序(weak-ordered)。

数据结构必须按照二进制搜索算法假设的相同顺序进行排序。正如我所提到的,如果数据按升序排序,就像OP所说的那样,并不意味着二进制搜索将提供正确的结果,例如,如果搜索是按降序构建的。有许多命令,升序,降序,词典等等。

使用二进制搜索功能时,必须确保输入已排序,并按照您要使用的顺序排序。如果不符合这两项要求 - 您无需提供正确的结果。

答案 1 :(得分:2)

二元搜索here的前提条件有很好的破坏:

  

必须根据排序按升序对数组进行排序   由搜索功能中的比较使用。

作者只指定一个先决条件,但我希望你可以将其分解为彼此相关的2个条件......

  • 必须按升序或降序排序,具体取决于您的搜索算法
  • 输入必须与比较算法
  • 兼容

答案 2 :(得分:1)

也许你需要随机访问二进制搜索才能有效。或者至少数组应该可以多次迭代。

答案 3 :(得分:1)

元素需要在排序数组中,所以我猜他们的意思是

1)元素在一个数组中(或任何支持索引访问的数据结构)。

2)根据比较功能对存储进行排序。

答案 4 :(得分:0)

元素必须具有小于运算符的定义。

答案 5 :(得分:0)

这意味着

  1. 必须对Arrray进行排序

  2. 使用的排序算法