二分法代码分析

本文详细分析了二分法在算法竞赛中的应用,包括常规二分、寻找右边界和寻找左边界的问题。介绍了如何根据不同的搜索条件调整二分法的初始值、循环条件、边界变换和返回值,帮助理解如何在有序数组中高效查找目标值。
摘要由CSDN通过智能技术生成

二分法代码分析

  二分搜索又称为折半搜索。使用二分时,要确保数列是具有有序性的,通过比较中间值,不断将搜索范围缩小为原来的一半,大大缩短了查找的时间,其时间复杂度为 O ( log ⁡ n ) O(\log {n}) O(logn)

  在算法竞赛中,二分使用的频率十分广泛,常见的二分问题包括:判断某个值是否出现在数组中,如果出现则求出坐标;找出第一个比X值大的数的坐标;X值第一次出现在数组中的位置等。这些问题都可以统称为“从有序数组中查找值”,求解的过程大致相似,区别在于二分的迭代条件不同,需要根据具体的情况调整。

  具体调整的内容有四块:
  ① leftright的初始值
  ② while循环的条件
  ③ 边界变换
  ④ 返回值


1、常规二分

  寻找某一特定值,找到即可返回,其过程为:先找到搜索区间[l, r],然后对mid位置值与待查找值的大小。当value[mid]大于待查找的值时,说明待查找的值位于 [l, mid-1]内;当value[mid]小于待查找的值时,说明待查找的值位于[mid+1, r]内;若二者值相等,则成功匹配。代码如下:

int binarySearchNormal(int arr[], int length, int x)	// 数组、数组长度、待查找值
{
   
	int l = 0, r = length - 1, mid;		// 搜索空间为[l, r],即左闭右闭,因此决定了下方while的跳出条件

	while (l <= r) {
   					// 当l == r时,搜索空间[l, r]仍不为空,所以要继续循环,因此
		mid = l + (r - l) / 2;
		if (arr[mid] == x) {
   
			
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值