首页 > 其他分享 >3月22日二分法查找

3月22日二分法查找

时间:2024-03-23 13:33:31浏览次数:26  
标签:target 22 nums int mid 二分法 查找 left

二分查找:

二分查找也叫折半查找,二分查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

普通查找的时间复杂度为O(n),二分查找的时间复杂度仅需要O(log2^n)

查找的实现原理:先定左右边界,之后比较待查找元素与中间元素谁大谁小,如果中间值大于目标值,那么右边界等于中间mid-1;如果中间值小于目标值,那么左边界left=mid+1;

代码实现

int main() {
	int n;
	scanf("%d", &n);
	int* nums = (int*)malloc(sizeof(int) * n);
    if(nums==NULL)return 0;
	for (int i = 0; i < n; i++) {
		scanf("%d", &nums[i]);
	}
	int left = 0, right = n - 1;
	int target;
	scanf("%d", &target);
	while (left <= right) {
		int mid = (right - left) / 2 + left;
		if (nums[mid] > target) {
			right = mid - 1;
		}
		else if (nums[mid] < target) {
				left = mid + 1;
		}
		else {
			printf("%d", mid);
		}

	}
    free(nums);
	return 0;
}

注意事项

  • 1.malloc申请空间,需要再最后释放空间:free(nums);
  • 2.malloc函数需要引用头文件#include<stdlib.h>
  • 3.防止下标越界我们尽量用减法计算中间值,避免采用加法(right+left)/2的形式
  • while的判定条件 left<= right;

习题:

有一个有序表 1,5 8 11 19  22 31 35 40 45 48 49 50当用二分法查找48的时候应该查找几次

第一次 mid=6 nums[mid]=31<48,left=mid+1=7;right=12;

第二次mid=10,nums[mid]=48 =48,成功找到

标签:target,22,nums,int,mid,二分法,查找,left
From: https://blog.csdn.net/2301_78814687/article/details/136949818

相关文章

  • 【数据分享】2008-2022年全国范围逐日NO2栅格数据
    空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000-2022年全国范围逐日的PM2.5栅格数据、2013-2022年全国范围逐日SO2栅格数据、2000-2022年全国范围逐日PM10栅格数据、2013-2022年全国范围逐日CO栅格数据和2000-2022年全国1km分辨率的逐日O3栅格数据(可查......
  • 2024年3月22号题解
    Fliptile解题思路对于这个题目可以用递推来写因为每次翻转只会影响一个十字架的区域,所以如果我们知道第一行的情况,那么是不是只要把第一行的所有的1在对应的下一个行的相同位置进行翻转就可以把第一行的所有的1变成0呢(重要性质) 那么只要我们不断递推下去就可以得到最后一......
  • 今日总结2024/3/22
    今日复习了BFS的抽象用法,可以根据实际问题不断枚举所有可能Acwing1355.母亲的牛奶农夫约翰有三个容量分别为 A,B,C升的挤奶桶。最开始桶 A 和桶 B都是空的,而桶 C里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为......
  • ubuntu22.4安装QT
    1、QT安装包下载首先需要在qt官网注册一个账号,然后下载一个在线安装器qt-unified-linux-x64-4.7.0-online.run,注意,注册QT账号时建议使用qq邮箱,亲测163邮箱不好使,账号认证邮件无法收到。2、在线安装完后,QTcreator无法启动,报错如下:Ubuntu22.04安装Qt之后启动QtCreator失败,报错......
  • CF1922E Increasing Subsequences
    一个显然的思路就是构造很多互不相关的上升序列。但是这样构造出来的\(n\)是\(O(\log_2^2n)\)量级的,所以需要考虑新做法。假设我们本来有一个上升序列,我们能否往里面插数?如果插入的数前面本来有\(x\)个数,那么它有\(2^x\)的贡献。于是容易想到先写一个最大的上升序列,再二......
  • 2024-03-22
    \({\color{orange}\star}\)2024-03-22\({\color{orange}\star}\)模积和#题目描述#求\[\sum_{i=1}^{n}\sum_{j=1}^{m}(n\bmodi)\times(m\bmodj),i\neqj\]\(\bmod19940417\)的值#Solution#不妨设\(n\lem\)容斥原理\[\sum_{i=1}^{n}\sum_......
  • BZOJ5223-有理有据题
    BZOJ5223-有理有据题题目大意给你\(m\)条线段\((a_i,b_i)\),再给\(n\)个区间\([l_i,r_i]\),\(q\)次操作,\(\texttt{Axy}\)添加一条线段\((x,y)\),其编号为最后一条线段加一。\(\texttt{Cx}\)查询\([l_x,r_x]\)和线段有交集(在边界点也算)的最长编号区间。\(\texttt......
  • 3.22
    写完镍、锡、氧化铝和黄金的数据展示表和价格可视化      ......
  • 20212217刘恒谦-Exp2 后门原理与实践
    实践过程记录使用netcat获取主机操作Shell,cron启动​ ncat即Netcat,可以收发传输层数据,由攻击者使用。cron是Linux中用于按计划执行脚本的工具,在网络对抗中让受害者连接不稳定时,重连攻击者,由受害者启动。​ 既然如此,受害者需要是Linux,否则没有cron命令,我购买了一台阿里云Ubuntu......
  • 3.22
    MinimumSpanningTrees给定一张\(n\)个点的完全图,每条边有\(p_0\)的概率不存在,\(\forall1\lei\lek\),有\(p_i\)的概率边权为\(i\),求所有可能总权值的概率.\(n\le40,k\le4\)数据严重偏小了似乎.\(f_{i,j,k}\)表示权值为\(1-i\)的边,\(j\)个有标号点组成的权......