java之二分查找法

不羁的心 提交于 2020-03-11 10:05:38

二分查找法

       二分查找的基本思想是:将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果xa[n/2],则只要在数组a的右半部搜索x. 折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是:(这里假设数组元素呈升序排列)将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止;如 果xa[n/2],则我们只要在数组a的右 半部继续搜索x。

/*
 * 使用二分查找法的前提:数列是有序的,顺序存储结构 *
 * 
 * 满足条件后采用折半的方式进行判断、查找,
 * 
 * 折半数列,拿数列下标对应的元素与查找对象比较(默认数列为升序 小-->大)
 * 个人总结:先折半,再判断,
 * 
 * 
 * 
 * 
 * 
 * 
 */

public class TwoFindWay {

	public static void main(String[] args) {
		
		int[]array =new int[] {1,5,7,9,11,20,29,99};//array.length=8
		
		Boss boss =new Boss(array);
		System.out.println(boss.find(6));

		System.out.println(boss.find(1));
		System.out.println(boss.find(99));
	}

public static class Boss{
	
	
	private int[] array;
	/*
	 * 初始化数组
	 * @param array
	*/
		public Boss(int array[]) {
			
			this.array=array;	
		}

		/*
		 * 
		 * 二分查找法的实现
		 * @param find
		 * @return
		 * 		
		*/
		public int find(int fd) {
			
			if(array==null) {//空了就返回-1
				return -1;
			}
			/*
			 * 定义开始结束下标,二分位置;
			 * @param start,end,mid;
			 * 
			 * 
			 * 
			*/
			int start=0;
			
			int end =array.length-1;
			while(start<=end) {//使用while 在二分位置开始遍历,查找满足的下标元素
				
				int mid =start+(end-start)/2;
				
				if(array[mid]==fd) {
				
					return mid;//找到了满足的下标元素返回数列 下标
					
				}else if(fd<array[mid]) {
					
					end =mid-1;//折半后 如果说比数列下标元素小,就左移一位下标,
				
				}else {
					
					start=mid+1;//反之,右移一位,
				}
					
			}
			return -1;//找不到就返回0,
		}
}

	
}

优点:速度较快,

缺点:使用门槛高。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!