在数组中搜索复杂度优于O(n)的元素

时间:2017-08-05 08:06:12

标签: c++ algorithm data-structures time-complexity

我有任何数组,其中元素首先按升序排列,然后按递减顺序

与A [10] = {1,4,6,8,3,2}类似,数组中没有重复项。

如果输入为7,则输出应为,元素不存在。

时间复杂度应该优于O(n)

我通过线性搜索获得结果,将每个元素与b元素进行比较。但是因为我想要更好的解决方案,然后O(n)

我尝试通过找到数组元素翻转的数据透视表,然后从(0到数字元素)搜索,然后再搜索(最后一个数据来转动元素)。

请建议。 对于O(n)

 #include<iostream>
 int main()
 {
     int A[10]={1,4,6,8,3,2};
     int i,num
     cout<<"Enter the element to be searched";
     cin>>num
     for(i=0;i<10;i++)
     {
         If(A[i]==num)
        {
          cout<<"Element exist";
         break;
      }
         else
         cout<<"Element do not exist";
     }
 }

1 个答案:

答案 0 :(得分:5)

<强>算法:

  1. 通过二进制搜索查找log(n)中的max并保存其索引。
  2. 在最大
  3. 的两边进行二元搜索
  4. 如果未找到并且元素不等于max,则它不存在。
  5. 如何执行第1步?

    • 选择数组的中间
    • 检查左侧的项目(您的邻居)。如果更大,则max位于右侧。否则,我们以递减顺序开始,最大值在左侧。选择左右搜索的方式取决于左侧的项目是否更大/更小。

    修改
    以防万一不清楚:如果你选择第n / 2个元素并且结果是最大值在左边,那么你选择第n / 4个元素,如果最大值在它的右侧,你只能继续搜索在n/4...n/2元素范围内。