当前位置: 首页 > article >正文

【数据结构】二分查找

  •  🚩 WRITE IN FRONT 🚩       

  • 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎
  • 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、CSDN专家博主、华为云享专家、阿里云专家博主、掘金优秀创作者、全网粉丝量8w+、个人社区人数累计4w+、全网访问量100w+ 🏅
  • 🆔 本文章内容由 謓泽 原创 如需相关转载请提前告知博主 ⚠
  • 📑 创作时间:2022 年 11 月 2 日 📅
  • 📝 个人主页:謓泽的博客 📃
  • 📣 专栏系列:数据结构_謓泽的博客-CSDN博客📃
  • 🙌 Gitee:謓泽 (wsxsx) - Gitee.com ⭐️
  • 🎁 点赞👍+ 收藏⭐️+ 留言📝​
  • ✉️ 我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 📩 

概述

        二分查找,也称为折半查找,是一种在有序数组中快速查找特定元素的算法。它的原理是通过将数组分成两半,并与目标元素进行比较,从而确定目标元素在哪一半中,然后再在该半部分继续进行二分查找,直到找到目标元素或确定目标元素不存在为止。

        注意,二分查找使用的场合是要在有序数组的条件下进行的。

题目内容

        在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回负一的值。

函数格式

int bin_search(int arr[], int left, int right, int key)
// arr 是查找的数组
//left 数组的左下标
//right 数组的右下标
//key 要查找的数字

代码

        说明:在这里我们一共有两种方式去对题目的要求进行实现。

        ① 遍历方法

        ② 二分查找方法

        所以:接下来謓泽都会用这两种方式带大家去实现。

#pragma warning(disable:6031)
#pragma message("二分查找法查找k的元素下标是否存在")
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
#if 1
	//注意:在数据结构当中二分查找的时间复杂度的算法是:O(logn)
	int k = 0;
	printf("请输入k的元素值:");
	scanf("%d", &k);
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = sz - 1;

	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,数组下标:%d,元素%d\n", mid, arr[mid]);
			break;
		}
	}
	if (left > right)
	{
		printf("找不到!\n");
	}
#else
	// 遍历方式
	int i = 0;
	int k = 7;
	int flag = 0;
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
		if (k == arr[i])	// 去比较下标
		{
			flag = 1;	// 找到了
			printf("下标:%d\n", arr[i]);
		}
	}
	if (flag == 0)
		printf("没找到!\n");
#endif
	return 0;
}

http://www.kler.cn/a/513820.html

相关文章:

  • YOLOv9改进,YOLOv9检测头融合RFAConv卷积,适合目标检测、分割任务
  • 【基于无线电的数据通信链】Link 11 仿真测试
  • 【数据结构】顺序队列与链式队列
  • Python基础学习(六)unittest 框架
  • C语言内存之旅:从静态到动态的跨越
  • 【Spring】定义的Bean缺少隐式依赖
  • python学opencv|读取图像(四十一 )使用cv2.add()函数实现各个像素点BGR叠加
  • 解决wordpress媒体文件无法被搜索的问题
  • C语言小项目——通讯录
  • PIC单片机设置bootloader程序和app程序地址方法
  • 海康C++开发面试题及参考答案
  • Flink 的核心特点和概念
  • 基于Redis实现短信验证码登录
  • 解决 Django 5.1 中的 TemplateSyntaxError 错误
  • 基于微信小程序的手机银行系统
  • 32V/4A,降压DCDC转换器CP8384百分百占空比输出ESOP8封装,可适用HUB等电路设计
  • 物联网网关Web服务器--CGI开发实例BMI计算
  • C# 以管理员方式启动程序全解析
  • 如何在oracle关闭情况下如何修改spfile的参数
  • 三分钟内快速完成MySQL到达梦数据库的迁移
  • 深度学习中的通道(Channel)概念详解
  • H3CNE-17-DHCP动态主机配置协议
  • CapsNet :用于图像识别的神经网络结构,包含胶囊层
  • 用edge浏览器追剧音量太小?安装音量增强器可解忧
  • 【Java计算机毕业设计】基于SSM圣宠宠物领养网站【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】
  • Word2Vec如何优化从中间层到输出层的计算?