希赛考试网
首页 > 软考 > 软件设计师

二分查找的实现方法

希赛网 2024-03-10 17:48:19

二分查找(Binary Search)也叫折半查找,是一种常用的查找算法。它应用较广泛,通常用于查找有序列表中某个特定元素的位置。在计算机科学中,二分查找被认为是一种比顺序查找更高效率的算法,时间复杂度为O(logn)。下面从多个角度分析二分查找的实现方法。

1.基本思想

二分查找的基本思想是将查找的区间划分为两部分,每次将当前区间的中点与要查找的值进行比较,如果中点值等于要查找的值,直接返回中点的位置;如果中点值大于要查找的值,那么就在区间的左半部分继续查找;否则在区间的右半部分继续查找,如此不断缩小查找区间,直到找到所需元素或确定所需元素不存在。

2.具体实现

二分查找需要有序列表的支持,因此可以先将无序列表排序后再进行查找。具体实现可以采用递归或循环的方式,下面分别介绍。

(1)递归实现

递归实现要求将查找区间的下标传递给递归函数,如下所示:

```

int binary_search(vector & nums, int target, int left, int right){

if (left <= right) {

int mid = left + (right - left) / 2;

if(nums[mid] == target)

return mid;

else if(nums[mid] < target)

return binary_search(nums, target, mid+1, right);

else

return binary_search(nums, target, left, mid-1);

}

return -1;

}

```

(2)循环实现

循环实现要求用while循环代替递归操作,如下所示:

```

int binary_search(vector & nums, int target){

int left = 0, right = nums.size() - 1;

while (left <= right) {

int mid = left + (right - left) / 2;

if(nums[mid] == target)

return mid;

else if(nums[mid] < target)

left = mid + 1;

else

right = mid - 1;

}

return -1;

}

```

3.优化方案

虽然二分查找算法的时间复杂度为O(logn),但是仍然有优化的空间,下面分别介绍两种优化方案。

(1)插值查找

插值查找算法假设查找表中的数据元素是均匀分布的,根据插值公式可以快速定位到要查找的数据元素所在的位置,可以大大提高查找效率。插值公式如下:

```

int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]);

```

其中findVal表示要查找的值,arr表示要查找的有序列表,left和right表示查找区间的左右边界,mid表示中间位置。

(2)斐波那契查找

斐波那契查找是对二分查找的一种改进算法,其基本思路是将查找区间按照黄金分割点划分,可以大大提高查找效率。具体实现可参考下面的代码:

```

int fibonacci_search(int arr[], int findVal, int len)

{

int low = 0;

int high = len - 1;

int k = 0;

int M = 0;

int* F = initFibonacci();

while (len > F[k] - 1) {

k++;

}

for (int i = len; i < F[k]; i++) {

arr[i] = arr[high];

}

while (low <= high) {

M = low + F[k - 1] - 1;

if (findVal < arr[M]) {

high = M - 1;

k = k - 1;

}

else if (findVal > arr[M]) {

low = M + 1;

k = k - 2;

}

else {

if (M <= high) {

return M;

}

else {

return high;

}

}

}

return -1;

}

```

4.

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件