/**
*
*/
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);
}
}
折半查找
最新推荐文章于 2019-01-28 02:40:22 发布