折半查找法(二分法)

一.需求:定义一个函数接收一个数组对象和一个要查找的目标元素,函数要返回该目标元素在数组中的索引值,如果目标元素不存在数组中,那么返回-1表示。

1.方式一:

(1)该方式很普通,效率也很低,首先遍历整个数组,让目标元素与每个值比较,如果相等则返回元素所在的索引值。

(2)实例:

class Demo1{
	public static void main(String[] args){
		int[] arr = {12,16,19,23,54};
		int index = searchEle(arr,23);
		System.out.println("元素所在的索引值是:"+index);
	}
	public static int searchEle(int[] arr,int target){
		for(int i = 0;i < arr.length;i++){
			if(arr[i]==target){
				return i;
			}
		}
		return -1;
	}
}

(3)运行结果如下图所示:

折半查找法(二分法)_第1张图片

2.方式二:折半查找法(二分法)

(1)折半查找法的使用前提必须是有序的数组。

折半查找法(二分法)_第2张图片

(2)实例

class Demo2{
	public static void main(String[] args){
		int[] arr = {12,16,19,23,54};
		int index = halfSearch(arr,116);
		System.out.println("元素所在的索引值是:"+index);
	}
	public static int halfSearch(int[] arr,int target){
		//定义三个变量分别记录最大、最小、中间的查找范围索引值
		int max = arr.length-1;
		int min = 0;
		int mid = (max+min)/2;
		while(true){
			if(target > arr[mid]){
				min = mid+1;
			}else if(target < arr[mid]){
				max = mid-1;
			}else{
				//找到了元素
				return mid;
			}
			//没有找到的情况
			if(max < min){
				return -1;
			}
			mid = (min+max)/2;
		}
	}
}

(3)运行结果如下图所示:
折半查找法(二分法)_第3张图片





你可能感兴趣的:(Java实例)