数组的二分查找法
所谓数组的二分查找法,对于一个有序数组,查找一个元素是否存在于数组中,如果存在就返回出现的索引,如果不存在就返回负数。
二分查找法原理:
取数组中间的元素和被查找的元素进行比较,如果被查找元素大于数组中间元素,就舍去数组元素的一半,对另一半继续进行查找。
方法一:
注意:二分查找时,数组必须是有序的.
关键代码:
public static int getIndex(int[] arr,int key){
int max = arr.length-1,min=0;
while(min<=max){
int mid = (max+min)/2;
if(key>arr[mid]){
min = mid+1;
}else if(key<arr[mid]){
max = mid-1;
}else if(key==arr[mid]){
return mid;
}
}
return -1;
}
方法二: Arrays数组工具类,相比于方法一更加快捷方便
Arrays.sort(arr)将数组重新排序
Arrays.binarySearch(int[] arr, key)
int[] arr = {4,62,1,45,79,674,323,22};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//二分
int i = Arrays.binarySearch(arr, 65);
System.out.println(i);
Arrays数组工具类:java.util.Arrays
此类包含用来操作数组的各种方法,比如排序和搜索等。Arrays类私有修饰构造方法,其所有方法均为静态方法,调用起来非常简单。
常用方法:
方法名 | 说明 |
public static void sort(int[] a) | 对指定的int数组进行升序排列 |
public static int binarySearch(int[] a,int key) | 对数组进行二分查找法,找不到元素返回(-插入点)-1 |
public static double floor(double a) | 将数组转成字符串 |
public static int[] copyOf(int[] a, int newLength) | 复制数组,指定新的长度,如果长度超过原数组,将多余的元素设置为数组元素的默认值 |