【问题标题】:Binary search in an array which has all but two elements are sorted,i.e all elements are sorted and then two adjacent elements swapped?对除两个元素外的所有元素进行排序的数组中的二进制搜索,即所有元素都已排序,然后交换两个相邻元素?
【发布时间】:2019-02-13 13:21:41
【问题描述】:

是否可以在数组中进行二进制搜索,首先对所有元素进行排序,然后交换两个相邻元素(排序后的数组)?

示例 3 10 40 20 50 70 80

在本例中,交换了 20 和 40。

【问题讨论】:

  • 添加更多标签,例如 c、c++、java 之类的。如果您提及语言,您可以立即得到回复。

标签: algorithm binary-search


【解决方案1】:

是的,可以对这种类型的数组进行二分查找。这个想法类似于旋转排序数组中的二进制搜索 -https://www.geeksforgeeks.org/search-an-element-in-a-sorted-and-pivoted-array/

假设你需要在这个搜索40--

  • 第一次迭代后 { 3 10 40 20 50 70 80 } -> { 3 10 40 20} 和 {50 70 80}。 划分此数组时,您将需要边界条件。在这种情况下,需要检查 40 是否存在于第二个子数组中。
  • 第二次迭代。 -> { 3 10 40 20} -> {3,10} {40,20}。 此处的第一个子数组需要应用相同的边界条件。

【讨论】:

  • 你怎么知道你需要搜索40?看起来即使你把它分成 2 个子数组,你仍然需要在两个子数组中搜索,那么这里的时间复杂度是多少?
  • 这只是一个例子。您可以取任何数字,但数组划分将是相似的。此外,您不需要在两个数组中搜索,只需在第一个数组的倒数第二个元素和第二个数组的第二个元素中进行搜索。复杂性仅为 O(log n),因为所有数组都没有被搜索到。
  • 嗯,有道理+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多