我们可以对未排序的数组使用二分查找吗?
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",必须对元素进行排序。
我有一个数组,看起来像
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",必须对元素进行排序。