我们可以对未排序的数组使用二分查找吗?

Can we use binary search with an unsorted array?

我有一个数组,看起来像

2 6 8 5 34 1 12

我可以对某些子数组使用二进制搜索吗?

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

如果您知道数组的一部分已排序,您可能会提取它,当然,在那里执行二进制搜索并将其从其他线性搜索中排除。

您只能对一种 "unsorted" 数组 - rotated array 使用二进制搜索。

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

你不能。 "Binary search" 检查值是在左侧还是右侧,比较何时小于或大于中心项。

数组: 2 6 8 5 34 1 12

假设您要查找“1”,那么在第一次迭代中,该方法会将“1”与当前的中心元素(在本例中为“5”)进行比较。该方法会说:"As 1 is lesser than 5, I'm going to search in left side",但如果我们这样做,我们将永远找不到它,因为在左侧没有一个。

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

注意1小于6(中心元素),所以下一步算法会继续向左搜索,就OK了。因此,要使用 "Binary Search",必须对元素进行排序。