二分法查找算法

[亡魂溺海] 提交于 2020-04-02 08:15:00

                                                  二分法查找算法

二分法算法,也叫折半算法,是一种检索效率比较高的方式,当数据量较大时用二分法查找会更快,但是数据需要先排好顺序,可以调用.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;
	}
}

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!