@rahul, they are right as binary search is made on sorted array only.
think of array as
0,2,3,8, 10, 12, 14., 15. here a[mid ] = 10 > mid(4) hence next search
should happen between 0 till 4 subarrray.. In my code the input array
is also not correct as it is not a sorted array and that's why I made
a mistake in writing the code as well. Anyways we are clear and
concluded the code as final as below

int BsearchElemEqualIndex (int *a, int start, int end)
{
        int mid = (((end - start) >> 1) + start);
        if (a[mid] == mid)
                return a[mid];
        else if (a[mid] != mid)
        {
                if (mid == start || mid == end)
                {
                        return -1;
                }
                else
                {
                        if(a[mid] > mid )
                        BsearchElemEqualIndex (a, start, mid);
                        else
                        BsearchElemEqualIndex (a, mid + 1, end);
                }
        }
}

int _tmain(int argc, _TCHAR* argv[])
{
        int a[SIZE] = {5,9,3,8,1,2,6,7};
        int x = BsearchElemEqualIndex (a, 0, SIZE);
        printf ("%d", x);
        system ("PAUSE");
        return 0;
}

On Thu, Mar 3, 2011 at 8:15 PM, rajul jain <rajuljain...@gmail.com> wrote:
> i think he is wrong bcoz this array in not sorted one.
> so solution of Ankit is right.
>
> On Thu, Mar 3, 2011 at 7:33 PM, nishaanth <nishaant...@gmail.com> wrote:
>>
>> Ignore the previous post..there is a small error in the code..
>> @Ankit..your algm is O(n)...you should split the problem size to n/2 at
>> every stage...rather you are again computing both the subarrays..
>> Here is the correct code...
>> int BsearchElemEqualIndex (int *a, int start, int end)
>> {
>>        int mid = (((end - start) >> 1) + start);
>>        if (a[mid] == mid)
>>                return a[mid];
>>        else if (a[mid] != mid)
>>        {
>>                if (mid == start || mid == end)
>>                {
>>                        return -1;
>>                }
>>                else
>>                {
>>                       if(a[mid] < mid )
>>                        BsearchElemEqualIndex (a, start, mid);
>>                        else
>>                            BsearchElemEqualIndex (a, mid + 1, end);
>>                }
>>        }
>> }
>>
>> int _tmain(int argc, _TCHAR* argv[])
>> {
>>        int a[SIZE] = {5,9,3,8,1,2,6,7};
>>        int x = BsearchElemEqualIndex (a, 0, SIZE);
>>        printf ("%d", x);
>>        system ("PAUSE");
>>        return 0;
>> }
>> S.Nishaanth,
>> Computer Science and engineering,
>> IIT Madras.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Algorithm Geeks" group.
>> To post to this group, send email to algogeeks@googlegroups.com.
>> To unsubscribe from this group, send email to
>> algogeeks+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/algogeeks?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to