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

二分查找第一个大于的数

希赛网 2024-02-10 09:55:33

二分查找,又叫折半查找,是一种常用的查找算法。与传统的顺序查找不同,二分查找算法需要预先将数据进行排序,然后在有序数据集合中寻找目标值。它的时间复杂度为O(log n),在大量数据的查找中,具有较高的效率和实用性。本篇文章将从多个角度分析二分查找算法中,寻找该算法中第一个大于给定值的数。

1. 算法思路

二分查找将数组分成两个部分,中间位置为mid,目标值为target。通过比较mid的值和target的大小,逐步缩小查询范围,直到目标值被查找到。而对于寻找第一个大于目标值的数来说,需要将mid的值与target的值进行比较,如果mid小于等于target,则缩小左半部分数组范围,否则缩小右半部分数组范围。重复该过程直到整个数组被遍历完。

2. 算法实现

接下来给出Java实现代码,以便更好地理解该算法的实现过程。

```java

public static int binarySearchingFirstGreaterThan(int[] nums, int target) {

int left = 0, right = nums.length - 1, ans = -1;

while (left <= right) {

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

if (nums[mid] > target) {

ans = mid;

right = mid - 1;

} else {

left = mid + 1;

}

}

return ans;

}

```

该方法接收一个有序数组nums和一个目标值target,返回该数组中第一个大于target的索引,如果该值不存在,则返回-1。算法的核心部分为while循环,循环结束的条件是left > right。在每次循环中,需要先求出当前查询范围的中间位置mid,然后将mid的值与target进行比较,如果mid大于target,则将ans记录为mid的值,并缩小右半部分数组范围(即将right更新为mid-1),否则缩小左半部分数组范围(即将left更新为mid+1)。

3. 算法举例

假设有一个有序数组[1, 3, 5, 7, 9],目标值为6。运行该算法后,第一次查询后得到的mid为2,该值为5,小于目标值6,因此需要查询右半部分数组,即将查询范围缩小为[7, 9]。第二次查询后得到的mid为3,该值为7,大于目标值6,因此将ans更新为3,并缩小左半部分数组范围,即将查询范围缩小为[7]。最终返回的结果为3,即数组中第一个大于目标值6的数的索引。

4. 算法优化

上述算法虽然实现简单,但在一些极端情况下会存在性能问题,例如查询范围中仅有1个元素等情况。这时可以利用Java语言的三元操作符优化代码。具体方式为将while循环的结束条件改为left < right,并且将if判断语句中的操作方式修改为三元操作符的形式。

修改后的Java代码如下:

```java

public static int binarySearchingFirstGreaterThan(int[] nums, int target) {

int left = 0, right = nums.length - 1, ans = -1;

while (left < right) {

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

ans = nums[mid] > target ? mid : ans;

left = nums[mid] > target ? left : mid + 1;

}

return nums[left] > target ? left : -1;

}

```

修改后的算法,同样接收一个有序数组nums和一个目标值target,返回该数组中第一个大于target的索引,如果该值不存在,则返回-1。需要注意的是,while循环的结束条件为left < right,这是为了防止查询数组只有1个元素的情况。在循环中,使用三元操作符将原来的if-else结构改为一个表达式,节省了程序的执行时间,提高了算法的效率。

5. 算法应用

二分查找算法具有较高的效率和实用性,随着计算机技术的发展,该算法在现代软件开发中得到了广泛应用。例如,对于搜索引擎中的关键词查询,往往需要在亿万级别的数据中快速查找到目标值,此时二分查找算法就有很好的应用场景。在数据处理和科学计算领域,也需要经常进行大量数据的查询处理,二分查找算法的优越性也得到了充分的体现。

微信扫一扫,领取最新备考资料


软考.png


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

软考报考咨询

微信扫一扫,定制学习计划