二分查找

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

如何有序排列写过——排序算法(详情点击进入)。

package demo02;

import java.util.Scanner;

public class Demo01 {
	public static void main(String[] args) {
		int []a= {1,2,3,5,6,7,8,9};
		int min=0;                          //数组最小值索引初始化赋值
		int max=a.length-1;					//数组最大值索引初始化赋值
		int mid=(min+max)/2;				//数组中间值索引初始化赋值
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入要查找的元素:");
		int i=sc.nextInt();					//键盘输入要查找的元素
		int index=-1;						//所要找的元素索引初始化赋值
		boolean flag= false;
		while(min<=max) {                   //根据最小值不可能大于最大值来做判断条件
			if(a[mid]==i) {					//元素等于中间值
				flag=true;
				index=mid;					//中间值索引赋值给所找元素索引
				break;
			}else if(a[mid]>i) {			//如果元素小于中间值
				max=mid-1;					//因元素小于中间值,改变所找范围,将新范围最大值索引赋值替换原来的最大值索引
			}else if(a[mid]<i) {			//如果元素大于中间值
				min=mid+1;					//因元素大于中间值,改变所找范围,将新范围最小值索引赋值替换原来的最小值索引
			}
            mid=(min+max)/2;			//将新范围中间值索引赋值替换原来的中间值索引
		}
		if(flag==true) {					//通过一个布尔值判断输出。
			System.out.print("元素所在数组索引为:"+index);
		}else {
			System.out.print("该数组没有元素"+i);
		}
	}
}

Java基础——二分查找_数组