Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
213 views
in Technique[技术] by (71.8m points)

Binary Search a non-existing number in a sorted array, return a larger negative number than -1

When the search number is 12, why does it return -6 instead of -1?

int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
System.out.println("1. Index is " + Arrays.binarySearch(list, 11));
System.out.println("2. Index is " + Arrays.binarySearch(list, 12));
Result:
1. Index is 4
2. Index is -6

Update

Now I understand because Arrays.binarySearch will return

(-(insertion point) - 1)

if the number is not in the array. i.e 12 is at insertion of 5, so return (-(5) - 1) = -6. Thanks for the help.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You may refer to the Javadoc : Arrays.binarySearch(int[] a,int key)

It returns :

  • index of the search key, if it is contained in the array;
  • otherwise : (-(insertion point) - 1).

Here the insertion point would be :

int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
         //  1^ 2^ 3^  4^  5^  

The position 5 so (-5-1) = -6


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...