java之二分查找法

5 篇文章 0 订阅
1 篇文章 0 订阅

二分查找法

       二分查找的基本思想是:将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,
		}
}

	
}

优点:速度较快,

缺点:使用门槛高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值