(a)
the goyle algorithm has bugs :
the value used to store (l+r)/2 and a[m]==v should be m not p as in futher steps we used m to check the values and returned m
———————————–
the not found condition must be l>r then return -1 beacuse if we consider the example
no of elements 5
elements are 1 2 5 7 8
and key is 2
then the fisrt mid value is 2 then a[2] is 5 as 5 is greater than 2 binarySearch(A,0,2-1,v) is called
then mid is 0 as a[0] is 1 as 1 is less than 2 binarySearch(A,0+1,1,v) is called
now l is equal to r so it returns -1 but the element is present so the condition should be l>r
then mid is i=1 a[1]=2 as 2 is equal to 2 it returns the index of 2.
——————————————
(b)
Goyle is correct .
If we consider the worst -case binary search makes (log n to base 2)*2+1 searches where as trinary search makes
(log n to base 3)*4+1 searches which can be written as (2/(log 3 to base 2) )*(log n to base 2) whose value is greater than 1. so tinary search makes more comparisions hence binary search is the best of two