牛刀小试---二分查找(C语言)

题目:在给定的升序数组中查找指定的数字n,并输出其下标

代码举例:

cs 复制代码
#include <stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//给定的升序数组
	int left = 0;//定义左下标
	int right = sizeof(arr) / sizeof(arr[0]) - 1;//定义右下标
	int key = 7;//要找的数字
	int mid = 0;//记录中间元素的下标
	int find = 0;//定义真假,用与判断输出
	while (left <= right)
	{
		mid = (left + right) / 2;//表示中间元素的下标
		if (arr[mid] > key)//中间下标所在元素大于要找的数字
		{
			right = mid - 1;//则右下标改变
		}
		else if (arr[mid] < key)//中间下标所在元素小于要找的数字
		{
			left = mid + 1;//则左下标改变
		}
		else//中间下标所在元素就是要找的数字
		{
			find = 1;//真,找到了
			break;//跳出循环
		}
	}
	//输出
	if (1 == find)
		printf("找到了,下标是%d\n", mid);
	else
		printf("找不到\n");
	return 0;
}

运行结果:

题目解析:

1. 明确概念:

二分查找,也叫折半查找,是一种在有序数组中查找特定元素的算法。它通过比较中间元素和目标值的大小,将查找范围缩小为一半,直到找到目标元素或者查找范围为空。

2. 知其原理(步骤)

  1. 确定搜索范围:首先,需要确定要在哪个区间内进行查找。这可以通过比较目标值与中间元素的大小来确定。如果目标值小于中间元素,则可以确定目标值只可能存在于前半部分;如果目标值大于中间元素,则可以确定目标值只可能存在于后半部分;如果目标值等于中间元素,则可以直接找到目标值。

2.划分区间:根据目标值与中间元素的比较 结果,可以将搜索范围划分为两个子区间。如果目标值小于中间元素,则将搜索范围缩小为前半部分;如果目标值大于中间元素,则将搜索范围缩小为后半部分。

3.在确定了新的搜索范围后,重复步骤1,2,直到找到目标值。

3. 思路方法:

知道其原理,将其转化为代码,通过定义左右下标,确定搜索范围,通过定义中间元素下标,确定中间元素,通过定义变量key表示所找目标值,通过定义变量flag,用于判断输出;比较目标值与中间元素的大小,根据目标值与中间元素的比较结果,通过左右下标的改变 ,缩小搜索范围,通过while循环实现重复;最后通过变量flag进行判断输出。

结言:本文将一维数组的使用与循环相结合,实现二分查找,进一步巩固数组和循环相关知识。

相关推荐
SuperByteMaster3 小时前
keil 工程 .gitignore配置文件
c语言
超级码力6664 小时前
【Latex文件架构】Latex文件架构模板
算法·数学建模·信息可视化
穿条秋裤到处跑4 小时前
每日一道leetcode(2026.04.29):二维网格图中探测环
算法·leetcode·职场和发展
Merlos_wind4 小时前
HashMap详解
算法·哈希算法·散列表
汉克老师5 小时前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
Yzzz-F7 小时前
Problem - 2205D - Codeforces
算法
老花眼猫7 小时前
编制椭圆旋转绘图函数
c语言·经验分享·青少年编程·课程设计
智者知已应修善业8 小时前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
Halo_tjn8 小时前
Java Set集合相关知识点
java·开发语言·算法
生成论实验室9 小时前
《事件关系阴阳博弈动力学:识势应势之道》第四篇:降U动力学——认知确定度的自驱演化
人工智能·科技·神经网络·算法·架构