1

Can anyone explain why this is happening? ie. Even when 175 is present in the array at location 7, the array.binarysearch is returning a negative value?

Please see this image:

Code http://www.freeimagehosting.net/uploads/555fef4560.jpg

1
  • 9
    Better post the relevant parts of your code instead of a picture. Commented Nov 7, 2009 at 20:36

4 Answers 4

9

Did you sort your array beforehand? BinarySearch expects the array to be sorted. Otherwise, it may return incorrect results.

Also, you should check for >= 0, not > 0. The element can be present at index 0.

Sign up to request clarification or add additional context in comments.

Comments

1

From the picture, the array is 220 elements and you only show the first 7. All 220 elements must be sorted, otherwise BinarySearch will fail.

If for instance you only use the first num elements, use BinarySearch(0, num, 175)

Comments

0
  1. Make sure the array is sorted
  2. Make sure the object you are searching for is of the same type as the objects int he array. It helps to use the generic version:

    Array.BinarySearch(..)

1 Comment

What if I cannot sort it because it would kill correct order of elements? Let's say I have a unique list of strings from DB. I want to traverse it "as is" and make a "pattern match": public int Compare(string source, string pattern) { if (source.StartsWith(pattern)) { return 0; } return source.CompareTo(pattern); }
0

You could use Type specific version to make sure your input parameters are correct if the array is sorted:

 int[] array = new int[] { 1, 3, 4, 5, 175, 200, 300, 400 };
 int index = Array.BinarySearch<int>(array, 175);

You'll get a compilation error if the input array or search parameter is not of type int.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.