折半查找 -- 二分查找

JAVA学习网 2017-12-07 20:14:02
小知识点,初学者易懂,备注清晰,简单明了。

要求:
   1. 在有序的情况下,升序和降序。
   2.求某个元素在数组中的位置,如果不存在返回-1。
//包名
package test1111;

public class Demo2 {
	public static void main(String[] args) {
		//首先是一个排好序的数组(升序或降序)
		int[] arr = {11,23,40,45,59,65,99};
		//查找 数字45
		int index = getIndex(arr, 65);
		//获得查到的数字下标值
		System.out.println("index="+index);//index=5
	}
	public static int getIndex(int[] arr,int key){
		int minIndex = 0;//最小下标
		int maxIndex = arr.length-1;//最大下标
		int midIndex = (maxIndex + minIndex)/2;//中间下标
		while(key != arr[midIndex]){
			//当中间值和key不等的时候进入循环重新获得一组数字
			if(key > arr[midIndex]){
				//key大于中间值,获得新值最小下标等于中间下标+1
				minIndex = midIndex + 1;
			}else{
				//key小于中间值,获得最大下标等于中间下标-1
				maxIndex = midIndex - 1;
			}
			if(maxIndex < minIndex){
				//最大下标小于最小下标 证明值不存在
				return -1;//若果不存在返回-1
			}
			//新的一组数字的中间下标
			midIndex = (maxIndex + minIndex)/2;
		}
		return midIndex;//始终返回的都是数组中间那个数的下标
	}
}

  

阅读(772) 评论(0)