基本数据结构复习

package jxau.blueDot.lyx;

/**
 * 
 * @author lyx
 *	@下午4:27:42
 * @TODO:
 * 	数组实现二分查找
 * 	前提:有序数组
 */

/**
 * 二分查找算法:
 * 	设n  = right - left +1是数组o[left...right]的长度,二分查找每循环一次,就要
 * 将目标值与数组中间位置的成员值比较一次,然后搜索范围缩小一半,如果查找不成功,
 * 这些步骤重复的次数等于反复二等分n直到为0的次数,比较次数为floor(log2^n)+1
 * 如果查找成功,最大比较次数也为floor(log2^n)+1,因此,二分查找算法的时间代价
 * 都为O(logn)
 * 
 */
public class ArrayBinarySearch {

	static final int NONE = -1;
	
	static int binarySearch(Comparable o[] , int left , int right , Comparable val){
		
		int l = left ;
		int r = right;
		
		while (l <= r){
			
			//取中间元素下标
			int m = (l + r) / 2;
			int comp = val.compareTo(o[m]);
			
			//比较成功,查找到结果
			if(comp == 0){
				
				return m;
			
			//说明val的值小于o[m],则缩小上界,在l到m-1处继续二分查找
			}else if(comp < 0){
				
				r = m - 1;
			
			//说明val的值大于o[m],则缩小下界,在m+1到r处继续二分查找
			}else {
				
				l = m + 1;
				
			}
			
		}
		
		return NONE;		
	}
}


你可能感兴趣的:(基本数据结构复习)