关于用C语言进行二进制搜索算法的质疑

关于用C语言进行二进制搜索算法的质疑,c,algorithm,binary-search,C,Algorithm,Binary Search,在二进制搜索算法中 大体上 if mid_value > search_element we set high = mid_pos-1 ; else mid_value < search_element we set low = mid_pos+1 ; 如果中间值>搜索元素,我们将其设置为高=中间位置1; 否则mid_value搜索元素,我们设置高=中间位置; 否则mid_value

在二进制搜索算法中

大体上

if   mid_value > search_element we set high = mid_pos-1 ;
else mid_value < search_element we set  low = mid_pos+1 ;
如果中间值>搜索元素,我们将其设置为高=中间位置1;
否则mid_value
但我刚刚修改了这样的算法

if   mid_value > search_element we set high = mid_pos ;
else mid_value < search_element we set  low = mid_pos ;
如果中间值>搜索元素,我们设置高=中间位置;
否则mid_value
但是我的老师告诉我,二进制搜索的标准算法是第一个,你写的也是一个搜索算法,但它不是二进制搜索的算法。
他说得对吗?

我想你接错了

基本的
二进制搜索算法的工作流程:

Procedure binary_search
   A ← sorted array
   n ← size of array
   x ← value to be searched

   Set lowerBound = 1
   Set upperBound = n 

   while x not found
      if upperBound < lowerBound 
         EXIT: x does not exists.

      set midPoint = lowerBound + ( upperBound - lowerBound ) / 2

      if A[midPoint] < x
         set lowerBound = midPoint + 1

      if A[midPoint] > x
         set upperBound = midPoint - 1 

      if A[midPoint] = x 
         EXIT: x found at location midPoint
   end while

end procedure
过程二进制搜索
A.← 排序数组
N← 数组大小
x← 要搜索的值
设置lowerBound=1
设置上限=n
而x没有找到
如果上界<下界
退出:x不存在。
设置中点=下限+(上限-下限)/2
如果[中点]x
设置上限=中点-1
如果A[中点]=x
退出:在位置中点处找到x
结束时
结束程序

在这里,您可以看到
middpoint=lowerBound+(上限-下限)/2
lowerBound=middpoint+1
upperBound=middpoint-1
的实际功能

您的算法不正确:

案例: 列表[1,2],searchElem=2,低=0,高=1

中位=(低+高)/2=(0+1)/2=0

中<搜索元素设置低=中 更新的mid=0,high=1[列表未更改]


因此,您将以无限循环结束。

可能的重复也是二进制搜索。只是我们将位置设置为(mid-1)或(mid+1),因为我们不需要在下一个条件中再次检查中间元素,因为它已经在上一个条件中完成了。在这两种情况下,运行时间或多或少是相同的。您知道吗,high=mid_pos-1,low=mid_pos+1的实际含义是什么吗。请首先了解位置的基本结构和流程。区别在于第一个位置比您的算法减少了一个范围,因此可能完成得更快。一个区别是,如果您不小心,第二个位置很容易进入无限循环。实际上,在我的算法中,high是由列表的长度发起的