折半查找

/**
 * 
 */
package com.search;

import org.junit.experimental.theories.Theories;

/**
 * @author lihai 
 * @version 2018-5-6 下午9:14:44
 * @类描述 折半查找
 */
public class BinarySearch {
	
	/**
	 * 
	 * 1.要求:折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
	 * 2.步骤:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
	 * 否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查
	 * 找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到
	 * 找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
	 * 3.时间复杂度:O(log2n)------以2为底,n的对数;
	 * 
	 * @param array
	 * @param key
	 * @return
	 */
	static int binaryImple(int array[],int key){
		
		//定义初始最小、最大索引
	    int low = 0;
	    int high = array.length - 1;
	    //确保不会出现重复查找,越界
	    while (low <= high) {
	        //计算出中间索引值
	        int middle = (high + low)>>>1 ;//防止溢出
	        if (key == array[middle]) {
	            return middle;
	        //判断下限
	        } else if (key < array[middle]) {
	            high = middle - 1;
	        //判断上限
	        } else {
	            low = middle + 1;
	        }
	    }
	    //若没有,则返回-1
	    return -1;
		}
		
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] arr ={1,3,5,7,9,11,15,18,35,47,68};
		int index = binaryImple(arr, 11);
		System.out.println(index);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值