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

news2024/9/30 7:16:12

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

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

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

相关文章

在Qt creator中使用多光标

2024年4月22日&#xff0c;周一下午 Qt Creator 支持多光标模式。 多光标模式允许你在同一时间在多个光标位置进行编辑&#xff0c;从而可以更快地进行一些重复性的编辑操作。 要启用多光标模式&#xff0c;请按住 Alt 键&#xff0c;并用鼠标左键在文本编辑器中选择多个光标…

恒创科技:网站更改域名对seo的影响大吗?

众所周知&#xff0c;搜索引擎优化 (SEO) 对于增加网站的自然流量、提高转化率以及提高品牌知名度至关重要。所以&#xff0c;网站在进行更改域名时&#xff0c;我们应当关注其对 SEO 的影响。 网站更改域名对 SEO 影响大吗? 更改域名会更改网站上每个页面的 URL &#xff0c;…

SpringSecurity初探(一)

认证:知道你是谁 授权:你能干什么 创建SpringBoot应用,引入web和security <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency><group…

Redis数据类型——String

Redis官网指令文档&#xff1a;Commands | Docs 前言 此处的String类型是针对Redis的Value的&#xff0c;因为Key的形式都是String&#xff0c;而Value则有哈性、列表、集合等形式。 众所周知&#xff0c;由于不同编码&#xff0c;经常会出现乱码的问题&#xff0c;但在Redi…

代码签名的定义、重要性及其应用实例

代码签名证书&#xff0c;简单来说&#xff0c;是一种数字证书&#xff0c;用于验证软件开发者身份以及软件代码的完整性和未被篡改。在软件开发和分发过程中&#xff0c;代码签名证书扮演着至关重要的角色&#xff0c;它为用户提供了信任保证&#xff0c;确保所下载和安装的软…

Quarto Dashboards 教程 2:Dashboard Layout

「写在前面」 学习一个软件最好的方法就是啃它的官方文档。本着自己学习、分享他人的态度&#xff0c;分享官方文档的中文教程。软件可能随时更新&#xff0c;建议配合官方文档一起阅读。推荐先按顺序阅读往期内容&#xff1a; 1.quarto 教程 1&#xff1a;Hello, Quarto 2.qu…

vue ant form validate如何对数组下的表单校验

问题 使用Ant Design Vue校验表单时&#xff0c;通过validateFields&#xff0c;但是如何一个数组内部的校验呢&#xff1f; 效果图&#xff1a; 实现方式&#xff1a; 通过 v-for 循环渲染:name"[]"实现&#xff0c;我们直接看代码。 <template><a-for…

vue3组件之间的传参

1、父传子 defineProps 父组件 <script setup>import { reactive } from vue;import Children from ./children.vue;const parentProps reactive({name:zhangsan,age:20})</script><template><div>这是父组件</div><div>子组件:<Chil…

空间数据索引的利器:R-Tree原理与实现深度解析

空间数据索引的利器&#xff1a;R-Tree原理与实现深度解析 R-Tree的原理插入操作分裂操作查询操作 R-Tree的伪代码R-Tree的C语言实现讨论结论 R-Tree是一种平衡树&#xff0c;用于空间数据索引&#xff0c;特别是在二维或更高维度的几何对象存储和检索中。它由Antony Guttman和…

万益蓝Wonderlab益生菌:吃雪糕的自由,我终于找回来了!

虽然现在不是夏天&#xff0c;但是我必须要来说一下&#xff01;我不仅在夏天可以吃雪糕&#xff01;冬天吃也完全没有问题&#xff01; 夏天&#xff0c;对于很多人来说&#xff0c;是雪糕、冷饮和冰镇西瓜的代名词。但对于我&#xff0c;这简直就是个“禁区”。每次看着别人…

ACS510-01-157A-4 3ABD00015756-D通用变频器

商业别名:ACS510-01-157A-4 产品ID:3ABD00015756-D ABB型号名称:ACS510-01-157A-4 目录说明:ACS510-01-157A-4,157A,380V,IP21 详细描述:ACS510-01-157A-4,157A,380V,IP21 原产地:China (CN) 海关关税号:85044099 发票说明:ACS510-01-157A-4,157A,380V,IP21 按订单生产:No 最小…

农业四情监测系统:科技助力农业智慧化

【MQ-4NYSQ】农业四情监测系统&#xff0c;依托农业物联网环境传感器&#xff0c;精准捕捉苗田苗情、土壤墒情、苗田灾情以及苗田病虫草情&#xff0c;为现代农业生产提供了有力支持。 传统的苗情监测往往依赖人工手动记录与上报&#xff0c;这种方式不仅效率低下&#xff0c;…

【深度学习实战(8)】如何绘制loss曲线图

一、步骤 我们先定义一个dict&#xff0c;每一个key对应的value都是一个list。 loss_history dict((k, []) for k in ["epoch", "train_loss", "val_loss"])每一轮或者每一次迭代的损失都通过list记录下来。 loss_history["epoch"…

Task01:初识深度学习

学习视频&#xff1a; 深度学习介绍_哔哩哔哩_bilibili 03 安装【动手学深度学习v2】_哔哩哔哩_bilibili 02 深度学习介绍【动手学深度学习v2】 x轴&#xff1a;不同的模式 y轴&#xff1a;“我”想做的东西 计算机视觉中是像素&#xff0c;很难用符号表示&#xff0c;所以…

Meta通过开源Llama 3 LLM提高了标准

Meta 推出了 Llama 3,这是其最先进的开源大型语言模型(LLM)的下一代产品。这家科技巨头声称,Llama 3 在现实场景中建立了新的性能基准,超越了之前行业领先的模型,如 GPT-3.5。 Meta 在一篇博文中宣布了这一发布,并表示:"通过 Llama 3,我们致力于打造与当今最好的专有模型…

qt实现不定数量的按钮向前向后移动展示

按钮模拟移动 引言示例代码第一种思路开发环境代码结构实现代码第二种思路开发环境实现代码第三种思路开发环境实现代码总结引言 此文主要记录用qt实现按钮的移动,具体效果如下: 模拟按钮移动效果 示例代码 本文记录了三种实现方式。 第一种 思路 用动态数组vector存放创…

系统调优助手,PyTorch Profiler TensorBoard 插件教程

0x1. 前言 使用PyTorch Profiler进行性能分析已经一段时间了&#xff0c;毕竟是PyTorch提供的原生profile工具&#xff0c;个人感觉做系统性能分析时感觉比Nsys更方便一些&#xff0c;并且画的图也比较直观。这里翻译一下PyTorch Profiler TensorBoard Plugin的教程并分享一些…

边缘计算网关的工业设备数据采集方案-天拓四方

随着工业4.0时代的到来&#xff0c;工业设备数据采集成为了实现智能制造、提升生产效率的关键环节。传统的数据采集方案往往依赖于中心化的数据处理方式&#xff0c;但这种方式在面对海量数据、实时性要求高的工业场景时&#xff0c;往往显得力不从心。因此&#xff0c;利用边缘…

代码+视频,R语言对数据进行多重插补后回归分析

我们在临床做回顾性研究分析中经常要面对数据缺失的问题&#xff0c;如果数据缺失量大就会对我们的研究结果产生影响&#xff0c;近年来&#xff0c;对数据进行多重插补广泛应用于SCI论文中。我们在之前的文章中已经演示了使用SPSS对数据进行多重插补并分析。今天&#xff0c;我…

swiper 去掉轮播图上的小点点 小圆圈(完美解决方案)

文章目录 问题描述解决方案问题复现处理方案 问题描述 大家好&#xff01;我是夏小花&#xff0c;今天是2024年4月22日|农历三月十四&#xff0c;今天这篇博文主要解决swiper 去掉轮播图上的小点点 小圆圈&#xff0c;具体解决方案如下所示 解决方案 问题复现 现在现在可以看…