一、题目
假设有一个数组 { 12, 23, 34, 45, 56, 67, 77, 89, 90 },现要求采用二分法找出指定的数值并将其在数组的索引返回,若没有找到则返回 -1。

二、实验代码

package fighting;
import java.util.Arrays;
public class fighting
{
	static int search(int[] a,int value)
	{
		int low=0;//指针low表示待查元素所在范围的下界,下界索引从0开始,则上界应为数组的长度减去1
		int high=a.length-1;//指针high表示待查元素所在范围的上界
		while(low<=high)
		{
			int mid=(low+high)/2;//指针mid表示中间位置,且是向下取整
			if(a[mid]==value)//若中间位置值等于我们所需要查找值,即返回中间值
			{
				return mid;
			}
			if(a[mid]<value)//若中间位置值小于我们所需查找值,则在后半段中查找,即将下界值变为mid+1,上界值不变
			{
				low=mid+1;
			}
			else若中间位置值大于我们所需查找值,则在前半段中查找,即将上界值变为mid-1,下界值不变
			{
				high=mid-1;
			}
		}
		return -1;//若查找不到我们所需要值,即返回-1
	}
	public static void main(String[] args) 		
    {
		int[] a= {12,34,56,78,90,24,67,43,75,20,89,98};
		Arrays.sort(a);//采用二分法查找时,数据需是有序不重复的,需要对该数组进行排序
		System.out.println(Arrays.toString(a));//Arrays.toString()打印数组
        System.out.println(search(a,34));//3
        System.out.println(search(a,67));//6
        System.out.println(search(a,99));//-1
		
    }
}

三、运行结果

二分法用java怎么实现 二分法java代码_算法


四、实验总结

1、二分法查找,又称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。算法思想为:从数组中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组已经为空,则表示找不到指定的元素。二分法查找每次是使查找范围缩小一半,其时间复杂度是O(log(n));下面给出该查找的过程实例:

二分法用java怎么实现 二分法java代码_算法_02

2、将数组中的内容打印出来,直接使用toString方法只会打印出数组的地址,需要使用Arrays的toString方法打印出格式的数组。

int[] a= {12, 20, 24, 34, 43, 56, 67, 75, 78, 89, 90, 98};
System.out.println(Arrays.toString(a));//[12, 20, 24, 34, 43, 56, 67, 75, 78, 89, 90, 98]
System.out.println(a.toString());//[I@2ff4acd0  该数组a的地址