数组。binarySearch()|集1 介绍如何在Java中查找排序数组中的元素。本集将介绍“如何在给定范围内搜索数组中的键,仅包括起始索引”。
语法:
公共静态int-binarySearch(数据类型[]arr,int-fromIndex,int-toIndex,数据类型键)
参数:
啊 –要搜索的数组
fromIndex –要搜索的第一个元素(包括)的索引
toIndex –要搜索的最后一个元素(独占)的索引
钥匙 –要搜索的值
- 它是中定义的静态内置方法 数组(java.util.Arrays) 类,并返回在指定范围内找到的指定键的索引。
- 在这里 数据类型 可以是任何原始的 数据类型 :byte、char、double、int、float、short、long以及Object。
- 上述函数使用二进制搜索算法搜索给定数据类型的指定数组中指定密钥的范围。
- 必须对要搜索的指定键进行排序的范围(如 数组。排序() 方法),然后再打电话。否则,结果将是未定义的。如果指定的数组包含多个与指定键相同的值,则无法保证会找到哪个值。
返回: 在指定数组的指定范围内找到指定键的索引,否则(-(插入点)–1)。
插入点定义为将插入指定键的点:范围中大于键的第一个元素的索引,或者如果范围中的所有元素都小于指定键,则定义为索引。 注意:这保证了当且仅当找到键时,返回值将>=0。
例如:
byteArr[]={10,20,15,22,35}
key=22,在指定数组的2到4范围内搜索。
产出:3
charArr[]={‘g’,’p’,’q’,’c’,’i’}
key=p要在指定数组中的范围1到4之间搜索。
产出:3
intArr[]={1,2,3,4,5,6}
key=3,在指定数组的1到4范围内搜索。
产出:2
doubleArr[]={10.2,1.51,2.2,3.5}
key=1.5,在指定数组的1到4范围内搜索。
输出:-2,因为它是1.5的插入点
floatArr[]={10.2f,15.1f,2.2f,3.5f}
key=35.0,在指定数组的1到4范围内搜索。
输出:-5
shortArr[]={10,20,15,22,35}
key=5,在指定数组的0到4之间搜索。
输出:-1
实施:
JAVA
// Java program to demonstrate working of binarySearch() // method for specified range in a sorted array. import java.util.Arrays; public class GFG { public static void main(String[] args) { byte byteArr[] = { 10 , 20 , 15 , 22 , 35 }; char charArr[] = { 'g' , 'p' , 'q' , 'c' , 'i' }; int intArr[] = { 1 , 2 , 3 , 4 , 5 , 6 }; double doubleArr[] = { 10.2 , 15.1 , 2.2 , 3.5 }; float floatArr[] = { 10 .2f, 15 .1f, 2 .2f, 3 .5f }; short shortArr[] = { 10 , 20 , 15 , 22 , 35 }; Arrays.sort(byteArr); Arrays.sort(charArr); Arrays.sort(intArr); Arrays.sort(doubleArr); Arrays.sort(floatArr); Arrays.sort(shortArr); byte byteKey = 22 ; char charKey = 'p' ; int intKey = 3 ; double doubleKey = 1.5 ; float floatKey = 35 ; short shortKey = 5 ; System.out.println( byteKey + " found at index = " + Arrays.binarySearch(byteArr, 2 , 4 , byteKey)); System.out.println( charKey + " found at index = " + Arrays.binarySearch(charArr, 1 , 4 , charKey)); System.out.println( intKey + " found at index = " + Arrays.binarySearch(intArr, 1 , 4 , intKey)); System.out.println(doubleKey + " found at index = " + Arrays.binarySearch( doubleArr, 1 , 4 , doubleKey)); System.out.println(floatKey + " found at index = " + Arrays.binarySearch( floatArr, 1 , 4 , floatKey)); System.out.println(shortKey + " found at index = " + Arrays.binarySearch( shortArr, 0 , 4 , shortKey)); } } |
22 found at index = 3p found at index = 33 found at index = 21.5 found at index = -235.0 found at index = -55 found at index = -1
例外情况:
- 非法数据异常 :当起始索引(fromIndex)大于指定范围的结束索引(toIndex)时引发。(意思是:从索引>到索引)
- 数组下标越界异常 :如果一个或两个索引都无效,则抛出。表示从索引<0或到索引>arr.length。
要点:
- 如果输入列表未排序,则结果未定义。
- 如果有重复的,不能保证会找到哪一个。
参考:
https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#binarySearch(整数[],%20int)
本文由 尼茨海伦德拉 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。