2022-07-29 10:59

二分查找法的算法实现

wanmatea

其它

(501)

(0)

收藏

一、二分查找法简介

二分查找法又称为折半查找法,这种查找方法需要待查的查找表满足两个条件:

首先,查找表必须使用顺序存储结构;

其次,查找表必须按关键字大小有序排列。

二、时间复杂度

二分查找法就是每次少一半,多少次之后变为 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条评论

点击登录参与评论