c++ 线性搜索与二分搜索

线性搜索
        假设该项目以随机顺序存在于数组中,并且我们必须找到一个项目。那么搜索目标项目的唯一方法就是从第一个位置开始,并将其与目标进行比较。如果项目相同,我们将返回当前项目的位置。否则,我们将转移到下一个位置。如果我们到达数组的最后一个位置但仍然找不到目标,则返回 -1。这称为线性搜索或顺序搜索。

以下是线性搜索的代码语法:

// Linear Search in C++
 
#include <iostream>
using namespace std;
 
int search(int array[], int n, int x)
{
 
    // Going through array sequencially
    for (int i = 0; i < n; i++)
        if (array[i] == x)
            return i;
    return -1;
}

二分查找
        然而,在二分搜索中,一旦找到排序列表的中间,就将搜索量减少一半。查看中间元素以检查它是否大于或小于要搜索的值。因此,对给定列表的任一半进行搜索

下面是二分查找的代码语法:
#include <iostream>
using namespace std;
 
int binarySearch(int array[], int x, int low, int high)
{
 
    // Repeat until the pointers low and high meet each
    // other
    while (low <= high) {
        int mid = low + (high - low) / 2;
 
        if (array[mid] == x)
            return mid;
 
        if (array[mid] < x)
            low = mid + 1;
 
        else
            high = mid - 1;
    }
 
    return -1;
}

重要差异

线性搜索 

二分查找

在线性搜索中,输入数据不需要排序。在二分查找中,输入数据需要按排序顺序。
它也称为顺序搜索。也称为半区间搜索。
线性搜索的时间复杂度O(n)。 二分查找的时间复杂度为O(log n)
可以使用多维数组。仅使用一维数组。
线性搜索执行相等比较二分查找执行排序比较
它不太复杂。它更复杂。
这是一个非常缓慢的过程。这是一个非常快的过程。

让我们看一个例子来比较两者:

线性搜索从 AX 中查找给定排序列表中的元素“J”

 二分查找从 AX 中查找给定排序列表中的元素“J” 

线性搜索示例: 

#include <iostream>
using namespace std;
 
int search(int array[], int n, int x)
{
 
    // Going through array sequencially
    for (int i = 0; i < n; i++)
        if (array[i] == x)
            return i;
    return -1;
}
 
int main()
{
    int array[] = { 12, 114, 0, 4, 9 };
    int x = 4;
    int n = sizeof(array) / sizeof(array[0]);
 
    int result = search(array, n, x);
 
    (result == -1)
        ? cout << "Element not found"
        : cout << "Element found at index: " << result;

输出
在索引处找到的元素:3
时间复杂度: O(n),其中 n 是输入数组的大小。最坏的情况是数组中不存在目标元素,并且该函数必须遍历整个数组才能找出该元素。
辅助空间: O(1),函数仅使用恒定量的额外空间来存储变量。使用的额外空间量不取决于输入数组的大小。

二进制搜索示例:

#include<bits/stdc++.h>
using namespace std;
 
int binarySearch(vector<int> arr,int x,int low,int high){
 
    while(low <= high){
 
        int mid = low + (high - low)/2;
 
        if (arr[mid] == x)
            return mid;
 
        else if (arr[mid] < x)
            low = mid + 1;
        else
            high = mid - 1;
    }
 
    return -1;
}
 
int main(){
    vector<int> arr = {2, 4, 5, 7, 14, 17, 19, 22};
    int x = 22;
 
    int result = binarySearch(arr, x, 0, arr.size()-1);
 
    if (result != -1)
        cout << result << endl;
    else
        cout << "Not found" << endl;
    return 0;
}
 
 
// The code is constributed by Nidhi goel

输出
7
时间复杂度: O(log n) – 二分搜索算法在每一步将输入数组分成两半,将搜索空间减少一半,因此具有对数阶的时间复杂度。
辅助空间: O(1) – 二分查找算法只需要常数空间来存储低、高、中索引,不需要任何额外的数据结构,因此其辅助空间复杂度为 O(1)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML 中创建 WebSocket服务与接收webSocket发送内容

效果图 服务端 html客户端接受的消息 接下来开始实现服务端 创建server.js const WebSocket require(ws);const wss new WebSocket.Server({ port: 8877 });wss.on(connection, function connection(ws) {console.log(WebSocket connection opened.);// 每隔 5 秒发送一次…

NIO之ByteBuffer

NIO中的ByteBuffer是缓冲区&#xff0c;其中有几个比较重要的属性capacity&#xff0c;position和limit。 capacity&#xff1a; 其中&#xff0c;capacity是缓冲区的容量大小&#xff0c;在分配内存空间后不会改变。 limit&#xff1a; limit是限制位置&#xff0c;在读写模…

【MongoDB】数据的自动过期,TTL索引

文章目录 1. 前言2.概念与使用2.1.使用方式2.2.数组中包含日期字段2.3.设置具体的过期时间点2.4.额外的过滤条件 3.总结 1. 前言 在近期的工作中&#xff0c;使用了MongoDB来保存了一些日志数据&#xff0c;但是这些日志数据具有一定的时效性&#xff0c;也就是按照业务的需要…

活动回顾丨雀跃山城•2024重庆爱鸟周主题公益活动落地大坪大融城

重庆&#xff0c;这座美丽的山城&#xff0c;不仅有着独特的山水风光&#xff0c;更是众多鸟类栖息繁衍的家园。重庆将四月第一周定为“重庆爱鸟周”&#xff0c;为提高青少年珍稀动物保护意识&#xff0c;4月20日&#xff0c;大坪大融城携手传益千里开展雀跃山城?2024重庆爱鸟…

cox版本的Boruta+SHAP分析(心力衰竭数据集)

Cox版本的BorutaSHAP分析&#xff08;心力衰竭数据集&#xff09; Boruta算法是变量筛选的有力工具&#xff0c;而SHAP分析是观察预测变量与结局变量间关系的不错的方法&#xff0c;在传统的分析方法的基础上提供了一个全新的视角。Boruta算法SHAP分析&#xff0c;正在逐渐成为…

Python代码格式化工具Black介绍

Black 是一个 Python 代码格式化工具&#xff0c;以其简洁和一致的格式化风格而闻名。它被设计为一个“零妥协”的代码格式化程序&#xff0c;意味着它会自动地将代码格式化为一种统一的风格&#xff0c;而不需要用户进行任何配置。Black 严格遵循 PEP 8 -- Python 的官方编码风…

笔试狂刷--Day2(模拟高精度算法)

大家好,我是LvZi,今天带来笔试狂刷--Day2(模拟高精度算法) 一.二进制求和 题目链接:二进制求和 分析: 代码实现: class Solution {public String addBinary(String a, String b) {int c1 a.length() - 1, c2 b.length() - 1, t 0;StringBuffer ret new StringBuffer()…

甘特图:如何制定一个有效的产品运营规划?

做好一个产品的运营规划是一个复杂且系统的过程&#xff0c;涉及多个方面和阶段。以下是一些关键步骤和考虑因素&#xff0c;帮助你制定一个有效的产品运营规划&#xff1a; 1、明确产品定位和目标用户&#xff1a; 确定产品的核心功能、特点和优势&#xff0c;明确产品在市…

Ubuntu 22最新dockers部署redis哨兵模式,并整合spring boot和配置redisson详细记录(含spring boot项目包)

dockers部署redis哨兵模式&#xff0c;并整合spring boot 环境说明相关学习博客一、在docker中安装redis1、下载dockers镜像包和redis配置文件&#xff08;主从一样&#xff09;2、编辑配置文件3、启动redis&#xff08;主从一样&#xff09;4、进入容器测试&#xff08;主从一…

快速上手Jemter分布式压测实战和代码详细解析

&#x1f680; 作者 &#xff1a;“二当家-小D” &#x1f680; 博主简介&#xff1a;⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人&#xff0c;8年开发架构经验&#xff0c;精通java,擅长分布式高并发架构,自动化压力测试&#xff0c;微服务容器化k…

MySQL的事务相关的语句的使用

MySQL的事务相关的语句的使用 事务是数据库管理系统执行过程中的一个程序单位&#xff0c;由一个或多个数据库操作组成。MySQL作为一款流行的关系型数据库管理系统&#xff0c;支持事务处理&#xff0c;允许用户定义一系列的操作&#xff0c;这些操作要么完全执行&#xff0c;…

每日OJ题_其它背包问题③_力扣377. 组合总和 Ⅳ(似包非包)

目录 力扣377. 组合总和 Ⅳ&#xff08;似包非包&#xff09; 解析代码 力扣377. 组合总和 Ⅳ&#xff08;似包非包&#xff09; 377. 组合总和 Ⅳ 难度 中等 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 t…

随着深度学习的兴起,浅层机器学习没有用武之地了吗?

深度学习的兴起确实在许多领域取得了显著的成功&#xff0c;尤其是那些涉及大量数据和复杂模式的识别任务&#xff0c;如图像识别、语音识别和自然语言处理等。然而&#xff0c;这并不意味着浅层机器学习&#xff08;如支持向量机、决策树、朴素贝叶斯等&#xff09;已经失去了…

【Linux】:文本编辑与输出命令 轻松上手nano、echo和cat

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Linux深造日志 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、nano1.1 打开文件&#xff1a;1.2 常用快捷键&#xff1a;1.3 其他功能&#xff…

PaddleSeg开始与搭建

因为使用的比较多,所以来总结一下。 先介绍一下,为什么用PaddleSeg 1、搭建模型更容易,和MMSeg相比,配置更加简单,容易上手 缺点是 1、目前版本还无法生成热力图,我看Paddle官方已经出比赛在解决这个问题了 2、和主流pytorch存在一定差别,模型迁移时需要熟悉两种配置;M…

DBA-现在应该刚刚入门吧

说来话长 在2023年以前&#xff0c;我的DBA生涯都是“孤独的”。成长路径除了毕业前的实习期有人带&#xff0c;后续几乎都是靠自学。如何自学&#xff0c;看视频、看文档、网上查阅资料、项目实战。 可能是学疏才浅 &#xff0c;一直都是在中小公司混&#xff0c;在中小公司通…

GNU Radio使用Python Block实现模块运行时间间隔获取

文章目录 前言一、timestamp_sender 模块二、timestamp_receiver 模块三、测试 前言 GNU Radio 中没有实现测量两个模块之间的时间测量模块&#xff0c;本文记录一下通过 python block 制作一个很简单的测时 block。 一、timestamp_sender 模块 使用 python block 做一个发送…

深入理解VGG网络,清晰易懂

深入理解VGG网络 VGG网络是深度学习领域中一个非常经典的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;由牛津大学的视觉几何组&#xff08;Visual Geometry Group&#xff09;提出。它在2014年的ImageNet挑战赛中取得了第二名的好成绩&#xff0c;并且在随后的许…

3ds Max2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 3ds Max是一款基于PC系统的强大3D建模、渲染和制作软件&#xff0c;广泛应用于游戏开发、影视后期制作、建筑设计、工业设计等多个领域。其拥有丰富的建模工具&#xff0c;可轻松创建逼真的三维场景和模型&#xff1b;同时&#…

揭秘!综合布线可视化管理软件如何助力集成商实现价值飞跃?

一、弱电集成商发展现状 近期小编通过与多家做弱电集成的朋友交流探讨了解到目前弱电集成商发展如同2024年国内大部分企业一样举步维艰&#xff0c;当然也有个别企业做的项目优质并且利润可观&#xff0c;但是整体不多&#xff0c;总结原因主要有以下几点&#xff1a; 工程项目…