Solved

binary search

Posted on 2011-09-30
7
192 Views
Last Modified: 2012-05-12
i wrote my binary search program as below...

char[] c1 = new char[]{'d','a','f','k','e'};
      Arrays.sort(c1);
x = 'f';
binarySearch(c1,x);      
public static int binarySearch(char [] c1, char x)
{  
      int low = 0;
        int high = c1.length - 1;
        int mid;
        while( low <= high )
        {
            mid = ( low + high ) / 2;

            if( c1[ mid ] == x )
                low = mid + 1;
            else if( c1[ mid ] ==  x )
                high = mid - 1;
            else
                return mid;
        }

        return 1000;  
}

I am not getting correct results with the above code


if x = 'f'

return value is 2

even if x = 'q'

return value is 2


what is the mistake

0
Comment
Question by:shragi
  • 3
  • 2
7 Comments
 
LVL 47

Expert Comment

by:for_yan
ID: 36895556
The above works - you should not for
precise equality, instead it should be < or >
0
 
LVL 13

Accepted Solution

by:
Hugh McCurdy earned 500 total points
ID: 36896213
This looks like homework.

One way to help yourself understand how your program works is to make yourself some "cards" (cut up a piece of paper) and put a letter on each card.  Then go through the program as if you are the computer.

Another is to print out the status of the program along the way.  In Java, you can use System.out.println();

For example  (place right after you set the value of mid)

System.out.println ( "mid = " + mid );
System.out.println ( "c1[mid] = " + c1 [ mid ] );
System.out.println ( "x = " + x );

This way you can see what your program is doing and (hopefully) why it won't work.

If you are still stuck, return here with the output of those println() messages.
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36897249


Shragi, you should change

if( c1[ mid ] == x )

to if(c1[mid] <x)

on its first occurrence
and

to (if(c1[mid] > x)


on its second occurrence,

as you need to determine in what half
your x value lies and based on that
either modify lower or upper boundary

As you understand in case if(c1[med] == x) then you'd rather
return med as the goal of your search (as you do it below).


So those were your two mistakes - replace those
==  by < in the first occurrence and by > in the second - and your code should be fine -
I tested it and it worked for me

_alias99,

shragi posted the whole code and asked to help to pinpoint the mistake
I found two mistakes (or rather one mistake made twice)
and communicated it. I posted the code which was all pasted form shragi's
question with two symbols corrected.
Homework or not, I don't think this interaction violates EE rules, which say:

"helping a student with a project is allowable, but not doing it for them."

The Asker wrote the code himself - it was just help and cannot be qualified as "doing it for them" by any means.
 







0
 
LVL 13

Expert Comment

by:Hugh McCurdy
ID: 36898244
for_yan, I did something similar in C++ and it wasn't OK with the moderator.  I was told that instead of telling the author which line was wrong was to say something like "you can't use a null pointer in C++; can you find the line where you used the null pointer?"  What I had done (wrong) was tell the author that he had a null pointer on line X.
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36908116
I also poseted explanation before - and this is not much of an issue - it was most probably a misprint on the part of the author, just put ==
when he meant > or < - nothing much
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
count7 challenge 12 70
array6 challenfge 6 64
nestparen challenge 4 56
wordlen challenge 3 47
Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now