C++ - 查找算法 和 其他 算法

目录

一. 查找算法:

1.顺序查找:

2.二分查找:

二. 其他算法:

1.遍历算法:

2.求和、求平均值等聚合算法。

a.求和算法:

b.求平均值算法:


一. 查找算法

1.顺序查找

序查找,也叫线性查找,是一种最简单的查找算法。

基本原理
从数组的第一个元素开始,逐个与要查找的关键字进行比较,直到找到匹配的元素或者遍历完整个数组。

优点

  • 算法简单,易于理解和实现。

缺点

  • 效率相对较低,特别是在数据量较大时。

具体步骤

  1. 依次遍历数组中的每个元素。
  2. 将每个元素与要查找的目标值进行比较。
  3. 如果找到匹配的元素,返回该元素的位置或其他相关信息;如果遍历完整个数组都没有找到,则表示查找失败。

以下是一个用 C++ 实现顺序查找的代码示例:

#include <iostream>// 顺序查找函数
int sequentialSearch(int arr[], int n, int target) {for (int i = 0; i < n; i++) {if (arr[i] == target) {return i;}}return -1; // 表示未找到
}int main() {int arr[] = { 10, 20, 30, 40, 50 };int target = 30;int result = sequentialSearch(arr, sizeof(arr) / sizeof(arr[0]), target);if (result != -1) {std::cout << "元素 " << target << " 在数组中的位置是: " << result << std::endl;}else {std::cout << "未找到元素 " << target << std::endl;}return 0;
}

2.二分查找

二分查找是一种在有序数组中查找某一特定元素的搜索算法。

原理
不断将数组中间的元素与目标元素进行比较,如果相等则找到;如果目标元素小于中间元素,则在数组的前半部分继续查找;如果目标元素大于中间元素,则在数组的后半部分继续查找,如此反复,直到找到或者确定不存在。

优点
查找效率高,时间复杂度为 。

缺点
要求数组必须是有序的,并且不适用于频繁插入和删除操作的场景。

具体步骤

  1. 定义左边界 left 为 0,右边界 right 为数组长度减 1。
  2. 进入循环,当 left <= right 时:
    • 计算中间索引 mid = (left + right) / 2
    • 如果中间元素等于目标元素,返回中间索引。
    • 如果目标元素小于中间元素,将右边界更新为 mid - 1
    • 如果目标元素大于中间元素,将左边界更新为 mid + 1
  3. 循环结束后仍未找到则返回特定表示未找到的值。

以下是一个用 C++ 实现二分查找的代码示例:

#include <iostream>// 二分查找函数
int binarySearch(int arr[], int left, int right, int target) {while (left <= right) {int mid = left + (right - left) / 2;if (arr[mid] == target) {return mid;}else if (arr[mid] < target) {left = mid + 1;}else {right = mid - 1;}}return -1; // 表示未找到
}int main() {int arr[] = { 1, 3, 5, 7, 9, 11, 13 };int target = 7;int result = binarySearch(arr, 0, sizeof(arr) / sizeof(arr[0]) - 1, target);if (result != -1) {std::cout << "元素 " << target << " 在数组中的位置是: " << result << std::endl;}else {std::cout << "未找到元素 " << target << std::endl;}return 0;
}

二. 其他算法

1.遍历算法

遍历算法是用于逐个访问数据结构(如数组、链表、树等)中每个元素的方法。

以下是一些常见的遍历算法:

数组的遍历

  • 顺序遍历:从数组的第一个元素开始,依次访问每个元素直到最后一个。

链表的遍历

  • 通常从链表的头节点开始,通过节点间的指针依次访问下一个节点。

二叉树的遍历

  • 前序遍历:先访问根节点,再递归地对左子树进行前序遍历,最后对右子树进行前序遍历。
  • 中序遍历:先递归地对左子树进行中序遍历,再访问根节点,最后对右子树进行中序遍历。
  • 后序遍历:先递归地对左子树和右子树进行后序遍历,最后访问根节点。

图的遍历

  • 深度优先遍历:沿着一条路径尽可能深地探索,直到无法继续前进,然后回溯并尝试其他路径。
  • 广度优先遍历:先访问距离起始点最近的节点,再依次访问距离稍远的节点。

遍历算法的意义在于能够全面、系统地处理数据结构中的所有元素,以便进行各种操作,如查找、统计、修改等。

例如,在数组中查找特定元素、计算链表中节点的总和、在二叉树中进行特定节点的操作等都依赖于遍历算法。

不同的数据结构和应用场景可能需要选择不同的遍历方式,以达到最佳的效率和效果。

2.求和、求平均值等聚合算法

a.求和算法


就是将一组数据中的所有元素依次相加得到总和。

  • 简单地遍历数据集合,将每个元素累加到一个累加变量中。
  • 适用于各种数据结构,如数组、链表等。

b.求平均值算法


通常是先利用求和算法得到总和,然后除以元素的数量。

  • 先求出总和,再除以元素个数得到平均值。

具体步骤(以数组为例)

  1. 定义一个变量用于存储总和,初始化为 0。
  2. 遍历数组的每个元素。
  3. 将元素累加到总和变量中。
  4. 计算平均值时,将总和除以数组的长度。

以下是用 C++ 实现求数组元素总和和平均值的代码示例:

#include <iostream>// 计算数组总和
int sum(int arr[], int size) {int total = 0;for (int i = 0; i < size; i++) {total += arr[i];}return total;
}// 计算数组平均值
double average(int arr[], int size) {int total = sum(arr, size);return static_cast<double>(total) / size;
}int main() {int arr[] = { 10, 20, 30, 40, 50 };int size = sizeof(arr) / sizeof(arr[0]);int total = sum(arr, size);double avg = average(arr, size);std::cout << "总和: " << total << std::endl;std::cout << "平均值: " << avg << std::endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python深度学习基于Tensorflow(15)OCR验证码 文本检测与识别实例

文章目录 文本检测文本识别CTC层生成验证码并制作数据集建立模型模型推理 参考 文本检测 文本检测和目标检测类似&#xff0c;其不同之处在于文本目标具有序列特征&#xff0c;有连续性&#xff0c;可以通过结合 Faster R-CNN 和 LSTM 的方式进行文本检测&#xff0c;如 CTPN …

学习请求接口

axios的方法 方法一 方法二 方式三 方式四 ajax请求 fetch请求 学习一下

告别冗长代码:Java Lambda 表达式如何简化你的编程

在现代软件开发中&#xff0c;高效和简洁的代码变得越来越重要。Java作为一门成熟而广泛使用的编程语言&#xff0c;一直在不断进化&#xff0c;以满足开发者的需求。Java 8的推出标志着一次重要的飞跃&#xff0c;其中最引人注目的特性之一便是Lambda表达式。 Lambda表达式为J…

RK3588推理RetinaFace出现问题

RK3588推理RetinaFace出现问题 在RK3588上测试RockChip提供的RetinaFace模型时&#xff0c;出现下面的问题 $ python RetinaFace_pic.py done --> Init runtime environment I RKNN: [02:27:16.501] RKNN Runtime Information: librknnrt version: 1.5.2 (c6b7b351a2023…

Windows11下Docker使用记录(五)

目录 准备1. WSL安装cuda container toolkit2. win11 Docker Desktop 设置3. WSL创建docker container并连接cuda4. container安装miniconda&#xff08;可选&#xff09; Docker容器可以从底层虚拟化&#xff0c;使我们能够在 不降级 CUDA驱动程序的情况下使用 任何版本的CU…

音视频开发19 FFmpeg 视频解码- 将 h264 转化成 yuv

视频解码过程 视频解码过程如下图所示&#xff1a; ⼀般解出来的是420p FFmpeg流程 这里的流程是和音频的解码过程一样的&#xff0c;不同的只有在存储YUV数据的时候的形式 存储YUV 数据 如果知道YUV 数据的格式 前提&#xff1a;这里我们打开的h264文件&#xff0c;默认是YU…

储能逆变器测试负载箱是如何实现的

储能逆变器测试负载箱是专门用于模拟各种负载条件的设备&#xff0c;主要用于对储能逆变器进行性能测试和评估。它可以根据实际需求&#xff0c;模拟不同的负载类型、负载大小和负载变化率&#xff0c;从而为储能逆变器的设计和优化提供准确的数据支持。那么&#xff0c;储能逆…

【递归、搜索与回溯】搜索

搜索 1.计算布尔二叉树的值2.求根节点到叶节点数字之和3. 二叉树剪枝4.验证二叉搜索树5.二叉搜索树中第K小的元素6.二叉树的所有路径 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一…

defineProps定义类型

1.props标注类型 原因&#xff1a;确保给组件传递的props是类型安全的 <script setup lang"ts"> //1.使用别名类型或者接口定义Props类型 type Props {name:stringage?:number } //2 使用defineProps注解类型 const props defineProps<Props>() <…

全年申报!2024年陕西省双软企业认定条件标准、申报好处费用

1.双软企业是什么? 答:双软认证并不是一个资质,而是"软件产品登记"和"软件企业认定"两个不同资质的统称.叫做"双软企业" 2.双软企业的优惠政策是什么? 答:(1)软件产品登记的优惠政策:软件产品增值税,从13%减按3%征收,实行即征即退; (2)软件…

2024Stable Diffusion WebUI详细使用指南

Stable Diffusion WebUI&#xff08;AUTOMATIC1111&#xff0c;简称A1111&#xff09;是一个为高级用户设计的图形用户界面&#xff08;GUI&#xff09;&#xff0c;它提供了丰富的功能和灵活性&#xff0c;以满足复杂和高级的图像生成需求。由于其强大的功能和社区的活跃参与&…

22 - 游戏玩法分析 IV(高频 SQL 50 题基础版)

22 - 游戏玩法分析 IV 考点&#xff1a; 聚合函数 # 日期相加 date_add(min(event_date),INTERVAL 1 DAY) select round(count(distinct player_id)/(select count(distinct player_id) from Activity),2) fraction fromActivity where-- 如果日期加一天的数据能在表中…

pytorch笔记:自动混合精度(AMP)

1 理论部分 1.1 FP16 VS FP32 FP32具有八个指数位和23个小数位&#xff0c;而FP16具有五个指数位和十个小数位Tensor内核支持混合精度数学&#xff0c;即输入为半精度&#xff08;FP16&#xff09;&#xff0c;输出为全精度&#xff08;FP32&#xff09; 1.1.1 使用FP16的优缺…

MySQL主从同步优化指南:架构、瓶颈与解决方案

前言 ​ 在现代数据库架构中&#xff0c;MySQL 主从同步是实现高可用性和负载均衡的关键技术。本文将深入探讨主从同步的架构、延迟原因以及优化策略&#xff0c;并提供专业的监控建议。 MySQL 主从同步架构 ​ 主从复制流程&#xff1a; 从库生成两个线程&#xff0c;一个…

20 - 每月交易 I(高频 SQL 50 题基础版)

20 - 每月交易 I -- 考点&#xff1a;日期转换格式 -- date_format(trans_date,%Y-%m)select date_format(trans_date,%Y-%m) month,country,count(*) trans_count,sum(if(stateapproved,1,0)) approved_count,sum(amount) trans_total_amount,sum(if(state"approved&qu…

【主题广泛|稳定检索】2024年食品安全与生物技术国际会议(ICFSB 2024)

2024年食品安全与生物技术国际会议&#xff08;ICFSB 2024&#xff09; 2024 International Conference on Food Safety and Biotechnology 【重要信息】 大会地点&#xff1a;贵阳 大会官网&#xff1a;http://www.icicfsb.com 投稿邮箱&#xff1a;icicfsbsub-conf.com 【注…

语言大模型qwen1.5全流程解析:微调,量化与推理

在前一篇文章中&#xff0c;主要使用llama-factory封装的推理模块对速度进行了测试&#xff0c;vllm速度快些&#xff0c;但仍没有传说中的快3-5倍&#xff0c;需要单独测试。这里使用qwen1.5-1.8B作为测试模型。 qwen1.5是qwen2的先行版&#xff0c;24年2月发布&#xff0c;与…

jenkins插件之Jdepend

JDepend插件是一个为构建生成JDepend报告的插件。 安装插件 JDepend Dashboard -->> 系统管理 -->> 插件管理 -->> Available plugins 搜索 Jdepend, 点击安装构建步骤新增执行shell #执行pdepend if docker exec phpfpm82 /tmp/composer/vendor/bin/pdepe…

ComfyUI工作流分享-黏土特效工作流

大家给的教程都是苹果端使用Remini的软件制作&#xff0c;免费白嫖7天&#xff0c;7天后就要收费&#xff0c;作为ComfyUI技术党&#xff0c;当然是选择自己实现了&#xff0c;搭建一套工作流就搞定&#xff0c;这不&#xff0c;今天就来分享一套对应的黏土效果工作流&#xff…

TSINGSEE青犀视频:城市道路积水智能监管,智慧城市的守护者

随着城市化进程的加快&#xff0c;城市道路网络日益复杂&#xff0c;尤其在夏季&#xff0c;由于暴雨频发&#xff0c;道路积水问题成为影响城市交通和市民生活的重要因素之一。传统的道路积水监测方式往往依赖于人工巡逻和简单的监控设备&#xff0c;这些方法存在效率低下、响…