二分法查找算法
二分法算法,也叫折半算法,是一种检索效率比较高的方式,当数据量较大时用二分法查找会更快,但是数据需要先排好顺序,可以调用.sort();方法进行排序。
先确定该区间的中间位置K(2)将要查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。如果没有查到,则将当前查找区间将缩小一半,递归查找,直到找到为止。
在检索的时候我们需要先对其进行排序:
Arrays.sort(arr);
为了便于操作,建议对其查找方法进行封装处理,定义好参数值:
public static int myBinarySearch(int[] arr,int value) { }
在写这个方法之前我们需要先对其首位进行定义,我们可以对其声明一个变量:
int start=0; int end=arr.length-1;
用while循环进行判断:
while (start<=end) { int mid=(start+end)/2; if (value==arr[mid]) { return mid; } if (value>arr[mid]) { start=end+1; } if (value<arr[mid]) { end=mid-1; } } return -1;
如果没有查找到,则返回-1。
定义main方法和声明数组。
public class rFenFa { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr={45,6,3,8,7,11,12,18,25}; }
然后调用封装的myBinarySearch()方法,打印输出就可以了。
System.out.println(myBinarySearch(arr, 42));
源代码:
public class rFenFa { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr={45,6,3,8,7,11,12,18,25}; Arrays.sort(arr); //排序 System.out.println(myBinarySearch(arr, 42)); //需要查找的值 } public static int myBinarySearch(int[] arr,int value) { int start=0; int end=arr.length-1; while (start<=end) { int mid=(start+end)/2; if (value==arr[mid]) { return mid; } if (value>arr[mid]) { start=end+1; } if (value<arr[mid]) { end=mid-1; } } return -1; } }
来源:https://www.cnblogs.com/xiaomu0/p/10771322.html