【问题标题】:Can we use binary search with an unsorted array? [duplicate]我们可以对未排序的数组使用二分搜索吗? [复制]
【发布时间】:2016-06-24 01:35:06
【问题描述】:

我有一个看起来像的数组

2 6 8 5 34 1 12

我可以对某个子数组使用二分查找吗?

【问题讨论】:

  • 这有意义吗?二进制搜索假定一个排序数组是有原因的。
  • 你可以做到,只是不会得到任何有意义的结果。
  • “上层数组”是什么意思。

标签: algorithm binary-search


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你不能。 “二分查找”检查值是在左侧还是右侧,比较它何时小于或大于中心项。

    数组: 2 6 8 5 34 1 12

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

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

    注意 1 小于 6(中心元素),所以在下一步中,算法将继续在左侧搜索,这没关系。因此,要使用“二分搜索”,必须对元素进行排序。

    【讨论】:

      【解决方案3】:

      您只能对一种“未排序”数组使用二分搜索 - rotated array

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

      【讨论】:

        猜你喜欢
        • 2010-12-25
        • 2020-09-23
        • 1970-01-01
        • 2014-10-31
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多