欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 二分查找法

程序员文章站 2024-03-16 09:05:28
...
/**
 * 二分查找法
 *  适用于不经常变动而查找频繁的有序列表。
 * @author Administrator
 */
public class ErFenChaZhaoFa {
	
	public static void main(String[] args){
	
		 int[] arry = {1,4,5,7,8,12,15,17,22,36,35,45,50,112};
		 
		 int i = 35; //查找的值
		 
		 System.out.println( i + "的索引位置是:" + binarySearch(arry,i));
	}
	
	
	/**
	 * 循环实现二分查找法
	 *  限制:
	 * 	  必须是有序的序列
	 * 优点:
	 *   效率极高
	 * @param arry 要查找的数组
	 * @param i    查询的值
	 * @return -1则没查询到
	 */
	public static int binarySearch(int[] arry,int i){
		
		 int minIndex = 0;	          			//最小索引
		 int maxIndex = arry.length-1;			//最大索引
		 
		 while(minIndex <= maxIndex){ //循环条件,最小索引 小于或者等于 最大索引 (如果超出了就是没找到)
			
			int midIndex = (maxIndex+minIndex)/2; //计算中间索引(最小索引+最大索引)/2
			 
			 if(i == arry[midIndex]){ //当数组下标为中间索引的值 等于 i 的时候
				 
				return midIndex; //返回中间索引
			 }
			 else if( i < arry[midIndex]){ //当i的值  小于 数组下标为中间索引的值 的时候
				 
				 maxIndex = midIndex - 1; //(最小索引不变,最大索引 = 中间索引 - 1)
				 
			 }else{ //大于的时候
				 
				 minIndex = midIndex + 1; //(最大索引不变,最小索引 = 中间索引 + 1)
			 }
		 }
		 return -1;  //返回-1
	}

}

 

相关标签: Java