一、二分查找法简介
二分查找法又称为折半查找法,这种查找方法需要待查的查找表满足两个条件:
首先,查找表必须使用顺序存储结构;
其次,查找表必须按关键字大小有序排列。
二、时间复杂度
二分查找法就是每次少一半,多少次之后变为 1 ,如果总个数是 16
即 2^x = 16,求 x
即 log2(16)
如果总数为 n
即 log2(n)
即 二分查找法的时间复杂度。
三、实现代码
1、非递归的二分查找
public static int binSearch(int[] array, int findValue) { // 如果数组为空,直接返回-1,即查找失败 if (array == null) { return -1; } // 起始位置 int start = 0; // 结束位置 int end = array.length - 1; while (start <= end) { // 中间位置 int middle = (start + end) / 2; // 中值 int middleValue = array[middle]; if (findValue == middleValue) { // 等于中值直接返回 return middle; } else if (findValue < middleValue) { // 小于中值时在中值前面找 end = middle - 1; } else { // 大于中值在中值后面找 start = middle + 1; } } // 返回-1,即查找失败 return -1; }
2、递归的二分查找
/** * 二分查找 * @param srcArray 有序数组 * @param start 数组开始位置 * @param end 数组结束位置 * @param key 查找的key * @return */ public static int binSearch (int array[], int start, int end, int key) { int mid = (end + start) / 2; if (start > end) { return -1; } if (array[mid] == key) { return mid; } else if (key > array[mid]) { return binSearch(array, mid + 1, end, key); } else { return binSearch(array, start, mid - 1, key); } }
0条评论
点击登录参与评论