我们可以使用带有未排序数组的二进制搜索吗?

时间:2016-03-09 15:21:20

标签: algorithm binary-search

我有一个看起来像

的数组
2 6 8 5 34 1 12

我可以在某些子阵列上使用二进制搜索吗?

3 个答案:

答案 0 :(得分:4)

不,二进制搜索需要一个排序数组。您可能拥有数组的其他属性,使您能够进行比仅仅迭代更有效的搜索,但二进制搜索的本质需要排序数据。

如果您知道阵列的某个部分已经排序,您可以提取它,当然,在那里执行二进制搜索并将其从线性搜索中排除。

答案 1 :(得分:4)

您只能在一种"未排序"上使用二进制搜索。数组 - rotated array

它可以在O(log n)时间内完成,就像典型的二元搜索一样,但使用经过调整的分而治之的方法。您可以找到关于它的讨论here

答案 2 :(得分:1)

你做不到。 “二进制搜索”检查值是左侧还是右侧,比较它是否小于或大于中心项。

阵列: 2 6 8 5 34 1 12

假设您要查找“1”,因此在第一次迭代中,该方法将“1”与当前中心元素(在本例中为“5”)进行比较。该方法会说:“由于1小于5,我将在左侧搜索”,但如果我们这样做,我们将永远找不到它,因为在左侧没有一个。

但如果我们有: 1 2 5 6 8 12 34

请注意,1小于6(中心元素),因此在下一步中,算法将继续在左侧搜索,这是正常的。因此,要使用“二进制搜索”,必须对元素进行排序。