Results 1 to 4 of 4
  1. #1
    In The Zone
    Join Date
    Sep 2005
    Posts
    227

    Default Binary Search in C++ using old code, search doesnt register element in last position

    hey,
    Using old code(non-ANSI)
    The search detects elements in all positions in the 1-d array, except the last one
    pastebin- http://pastebin.com/f4db70a8b
    //program to run binary search
    #include <iostream.h>
    int main ()
    {
    int a[10],n,x,pos=-1,i,first,last,mid;
    cout<<" Enter the number of elements into the array ";
    cin>>n;
    for(i=0;i<n;++i)
    {
    cout<<"\n Enter element number "<<i+1<<" ";
    cin>>a[i];
    }
    cout<<"Enter the number to be searched \t";
    cin>>x;
    first=0;
    last=n-1;
    while((first<=last)&&(pos==-1))
    {
    mid=(first+last)/2;
    if(a[mid]==x)
    pos=mid;
    else
    last=mid-1;
    }
    if(pos==-1)
    cout<<" \t Element not found ";
    else
    cout<<" Element found at position "<<pos+1;
    return 0;
    }
    Does anyone see my mistake? debugging is not my strong suit
    Our deepest fear is not that we are inadequate Our deepest fear is that we are powerful beyond measure

  2. #2
    Back! red_devil's Avatar
    Join Date
    Jun 2007
    Location
    Bangalore
    Posts
    510

    Default Re: Binary Search in C++ using old code, search doesnt register element in last posi

    Quote Originally Posted by karmanya
    #include <iostream.h>
    int main ()
    {
    int a[10],n,x,pos=-1,i,first,last,mid;
    cout<<" Enter the number of elements into the array ";
    cin>>n;
    for(i=0;i<n;++i)
    {
    cout<<"\n Enter element number "<<i+1<<" ";
    cin>>a[i];
    }
    cout<<"Enter the number to be searched \t";
    cin>>x;
    first=0;
    last=n-1;
    while((first<=last)&&(pos==-1))
    {
    mid=(first+last)/2;

    if(a[mid]==x)
    pos=mid;
    else
    last=mid-1;

    }
    if(pos==-1)
    cout<<" \t Element not found ";
    else
    cout<<" Element found at position "<<pos+1;
    return 0;
    }
    AFAIK, the logic is wrong mate...

    Binary search should divide the array of elements into 2 and then find out which half the element is likely to be found..{assuming the array is sorted } and then narrow the search down to that particular half ...

    the code you've posted doesn't do that..

    it should be something like :



    if ( element to be searched ) < the middle element,
    then search the array from first element to an element before middle element
    else
    search the array from the element after the middle element to the last element


    all this should be done within a conditional loop, ofcourse.

    PS : it was soo tempting to write the code itself... but i guess you'd want to do it on your own ...
    Last edited by red_devil; 08-10-2008 at 07:54 PM. Reason: Automerged Doublepost

  3. #3
    Legen-wait for it-dary! dheeraj_kumar's Avatar
    Join Date
    Dec 2004
    Location
    Chennai
    Posts
    2,470

    Default Re: Binary Search in C++ using old code, search doesnt register element in last posi

    Here, I'll write a pseudocode, I prefer it as a function due to recursive calling, returns array index if found, -1 if not.

    Code:
    int binsearch (int a[], int start = 0, int end = sizeof(a)/sizeof(int), int searchelement)
    {
       mid = (start + end) / 2;
       if (a[mid] == searchelement) //bingo, got it
          return mid;
       else if ((a[mid] > searchelement) && (mid != start)) //to prevent infinite loops
          return binsearch (a[], start, mid, searchelement);
       else if ((a[mid] < searchelement) && (mid != start)) //to prevent infinite loops
          return binsearch (a[], mid, end, searchelement);
       else //to actually exit from the function
          return -1;
    }
    If the Start Windows Restart when Windows starts check box is checked Windows Restart will start automatically every time Windows is started. - Actual excerpt from a windows program help file

  4. #4
    In The Zone
    Join Date
    Sep 2005
    Posts
    227

    Default Re: Binary Search in C++ using old code, search doesnt register element in last posi

    Thanks guys, Thanks to QwertyM who helped me fix it.
    last=mid instead of mid-1 fixed it.
    Our deepest fear is not that we are inadequate Our deepest fear is that we are powerful beyond measure

Similar Threads

  1. Replies: 0
    Last Post: 24-10-2010, 05:18 PM
  2. How to make a firefox search engine plugin in search box
    By blademast3r in forum Internet & WWW
    Replies: 1
    Last Post: 13-06-2008, 06:25 PM
  3. Binary Search
    By NagpurDaMunda in forum QnA (read only)
    Replies: 8
    Last Post: 21-04-2007, 01:04 PM
  4. Inserting AdSense for search code
    By whoopy_whale in forum QnA (read only)
    Replies: 1
    Last Post: 28-07-2005, 06:32 PM
  5. Search and find your Google position without certain filters
    By expertno.1 in forum Internet & WWW
    Replies: 1
    Last Post: 18-05-2005, 06:00 PM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Close