C++ <二分查找法>

C++算法——二分法查找 本章介绍了二分查找的算法思想,并且整理了相关的经典题目,从简单到难的去逐步递进,并且提供了链接和描述,可以直接通过链接去练习,或者直接看本篇博客去尝试思考解题,还提供了参考的思路,部分困难的题目会结合图像去分析,还有测试通过的参考代码 阅读详情

注:二分查找法有个问题,一组数字中有多个一样的数值时,其返回的下标位置不一样是数组中第一次出现的线标位置。
运行结果:

 Enter digit numbers less than 10: -5 5 -5 33 -10 4 1 33 5
  After sort: -10 -5 -5 1 4 5 5 33 33
 Enter you want to find number: -5
 Found it, the index is: 1

 Enter digit numbers less than 10: -5 5 -5 33 -10 4 1 33 5
 After sort: -10 -5 -5 1 4 5 5 33 33
 Enter you want to find number: 5
 Found it, the index is: 6

search.cpp

#include <iostream>

const int SIZE = 10;

void fillArray(int a[], int& usedSize);
void insertSort(int a[], const int& usedSize);
void show(int a[], const int& usedSize);
bool findVal(int a[], int first, int last, int& pos, const int& find);

int main() {
    using std::cout;
    using std::cin;

    int usedSize = 0, pos, find;
    int a[SIZE];
    cout << "Enter digit numbers less than 10: ";
    fillArray(a, usedSize);

    cout << "After sort: ";
    insertSort(a, usedSize);
    show(a, usedSize);

    cout << "Enter you want to find number: ";
    cin >> find;
    if (findVal(a, 0, usedSize - 1, pos, find))
        cout << "Found it, the index is: " << pos << '\n';
    else
        cout << "Not found.\n";

    return 0;
}


void fillArray(int a[], int& usedSize) {
    using std::cin;

    char c;
    for (int i = 0; i < SIZE && (c = cin.get()) != '\n'; i++) {
        cin.putback(c);
        cin >> a[i];
        usedSize++;
    }
}

void insertSort(int a[], const int& usedSize) {
    int temp, i, j;
    for (i = 1; i < usedSize; i++) {
        temp = a[i];
        for (j = i - 1; j >= 0 && temp < a[j]; j--)
            a[j + 1] = a[j];
        a[j + 1] = temp;
    }
}

void show(int a[], const int& usedSize) {
    using std::cout;

    for (int i = 0; i < usedSize; i++) {
        cout << a[i] << ' ';
    }
    cout << '\n';
}

bool findVal(int a[], int first, int last, int& pos, const int& find) {
    int mid;
    while (first <= last) {
        mid = (first + last) / 2;
        if (a[mid] == find) {
            pos = mid;
            return true;
        }
        else if (a[mid] < find)
            first = mid + 1;
        else
            last = mid - 1;
    }

    return false;
}

二分查找法 C++版 一、实现原理看下面代码中的注释。 二、实现方法及测试代码如下: #include &lt;iostream&gt; using namespace std; /****************************** 二分查找:又称折半查找,二分查找要求查找的数据必须是有序的,选取中间的数据为基数, 将数据分成两部分与查找关键字进行比较,如果关键字大于基数则在基数右半部分查找(此处 假设安... 阅读详情

相关推荐

c++二分查找法

二分查找法是从区间[i,j]上连续不断将sum(a)·sum(b)&amp;lt;0的函数ans=sum(x),通过循环实现把函数sum(x)的0点所在区间一分为二,如此循环,使区间[i,j]的两个端点逐渐像0点靠近,得到0点近似值的方法。可以实现空间优化,适用于数据较大的题目。时间复杂第O(log(2n))。 在使用c++的二分查找法,要先将数据排序,二分查找法的基本思想可以这样总结:我们设数据是按升序...

Konnyaku 1915

STL中二分查找函数

#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; using namespace std; int main() { int a[12] = {1,6,31,66,67,68,69,70,71,73,76,79}; int c[12] = {79,76,73,71,70,69,...

Df_cjc的博客 582

不写代码,Cursor 10分钟开发1个APP!保姆级教程喂饭来了

做出第一个能运行的app,那种成就感真的很棒。虽然过程可能有点折腾,但只要耐心一点,问题都能解决。记住,遇到问题不要慌,现在有AI帮忙,大部分问题都能快速解决。重要的是迈出第一步,开始动手实践。你的第一个app可能很简单,但这是一个很好的开始。随着经验积累,你能做出的东西会越来越酷。现在就开始行动吧,说不定下个月你就能向朋友炫耀你自己做的app了!

chenhong007的博客 1551

c++---查找(二分查找)

查找算法, 二分查找

zsysingapore的博客 375

FPGA串口通信----uart(一)

通过PLL锁相环IP的使用,可以输入时钟进行分频,倍频,也可以产生多路时钟输出信号。外部提供晶振的原因:①Fpga电路大多数需要时序分析②晶振在Fpga内部占空间大,所以放置于外部PCB板上Uart异步传输速率不能很快的原因:考虑到工程实际问题,假如时钟周期大(传输速率慢的话),采取到数据电平变化的边沿时刻的概率会小很多,这样数据也很准确,通常uart适用于2M.

mvpkuku的博客 970

从PHY芯片看工业网络精准时钟:IEEE 1588v2(PTP)协议实现与选型指南

本文深入解析了工业网络中IEEE 1588v2(PTP)协议的实现与PHY芯片选型要点。通过对比KG7101、RTL8211F等芯片的关键参数,揭示硬件时间戳对纳秒级时钟同步的决定性作用,并提供PTP网络设计中的拓扑布局与配置优化技巧,助力工业自动化场景实现精准时间同步。

weixin_42628688的博客 502

C++二分查找

二分查找(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是用来在一个有序数组中查找某一元素的算法。

m0_61033277的博客 4893

XCP详解「3.1·ASAP2新建A2L文件」

后面是ASAP2新建A2L的操作步骤,如果是APE中新建的A2L就无需以下操作,APE只需要导入现成的A2L即可。退出点击保存时会提示保存A2L文件,是因为前面导出的是1.70版本,工程最低1.71,可以另外起个名字即可。导入elf文件,elf路径建议直接索引编译生成的Debug下的,防止编译后忘记更新。导出V1.70格式A2L文件,APE17支持V1.70。通过ASAP2生成需要A2L文件更常用些。同一个信号可以创建不同属性量。ASAP2中新建A2L文件。设置标定信号数量最大值。XCP详解「总目录」

光明磊学习&积累的地方 3061

二分查找法(C++实现)

二分查找法的思想非常简单,在一组已经完成排序的数据(array[])中,如果需要查找某一特定数据(value)是否存在的时候,设置两个上下限(max, min)开始的时候在数组的最前和最后,把需要查找的值跟这两个位置的中间位置数据(array[(max+min)/2])进行对比,如果value >array[(min+max)/2] ,则缩小范围使得min=(min+max)/2,反之,如果...

CC_fighting的博客 1万+

基于Simulink的新能源汽车热管理系统设计与仿真详细介绍

新能源汽车(如纯电动汽车和混合动力汽车)的热管理系统是确保电池、电机和电控系统高效运行的关键。通过合理设计热管理系统,可以提高车辆的续航里程、延长电池寿命并提升整体性能。以下是如何在 MATLAB 和 Simulink 中设计并仿真一个新能源汽车热管理系统的详细步骤。通过上述步骤,我们成功设计并实现了基于 Simulink 的新能源汽车热管理系统。该系统能够根据目标温度和实际反馈,通过 PID 控制器或模糊控制器调整冷却液流量、风扇转速等参数,实现对电池、电机和车内的精确温度控制。

xiaoheshang_123的博客 385

【数据集实例】CMIP6气候模式数据下载-以河东地区为例

以河东地区为例,介绍CMIP6数据下载及处理

WW、forever的博客 4946

C++二分查找法,upper_bound与lower_bound

二分查找法(Binary Search)是一种在有序数组中查找特定元素的搜索算法。二分查找法的工作原理是通过不断将搜索区间分成两半来缩小查找的范围,每次比较中间元素与目标值,根据比较结果决定是继续在左半边还是右半边查找。首先,确定数组的中间位置。比较中间位置的元素与目标值。如果中间位置的元素正好是目标值,则搜索过程结束。如果目标值小于中间位置的元素,则在数组的左半边继续搜索。如果目标值大于中间位置的元素,则在数组的右半边继续搜索。重复上述步骤,直到找到目标值或搜索范围为空。

Qhumaing的博客 2001

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【c++算法】《二分查找法》——递归和非递归法

本文讲解二分查找法的两种实现方法——递归法和非递归法

麻垌小酷的博客 423

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

二分查找法总结(基于C++描述)

二分查找算法是一种效率较高的查找方法,但其适用的数据本身是有要求的,即数据需要有序排列(单调增加或减少),因此要在使用二分查找之前,可以先对数据进行排序,而后再进行查找是一个比较可行的实现途径。基于 sort 函数C++排序算法已经在下方文章中进行说明,欢迎大家线性阅读,本文将集中精力主要讨论二分查找的几种情况。

时光札记 1237

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

二分查找法及二分搜索树及其C++实现

二分查找法及二分搜索树总结及其C++实现二分查找法二分查找简介二分查找的实现二分搜索树二分搜索树简介二分搜索树的实现 二分查找法 二分查找简介 二分查找是一种在每次比较之后将查找空间一分为二的算法。每次需要查找集合中的索引或元素时,都应该考虑二分查找。如果集合是无序的,我们可以总是在应用二分查找之前先对其进行排序。 二分查找一般由三个主要部分组成: 预处理:如果集合未排序,则进行排序。 二分查找...

NEUChords的博客 3232

C++ 二分查找法【面试】

二分查找是一种高效的搜索算法,适用于有序数组。它的基本思想是将目标值与数组中间的元素进行比较。如果目标值大于中间元素,搜索范围缩小至数组的右半部分。二分查找法是一种在有序数组中查找特定元素的算法,其时间复杂度为O(log n)。:解释二分查找的基本原理,包括如何确定中间位置,以及如何根据中间值与目标值的比较结果更新搜索范围。如果数组中有重复元素,二分查找将返回任意一个匹配的索引。:讨论二分查找的时间复杂度为O(log n),其中n是数组的大小。:讨论函数的返回值,即找到目标时返回索引,未找到时返回-1。

xy18990的博客 731

算法与数据结构之二分查找法(C++代码实现)

算法的优化就在于提高它的效率即缩短运行时间,这就涉及到了时间复杂度的问题。对于一般的顺序查找法,用二分查找法快得多,特别是在查找的范围大时,二分查找法的优势就更明显了,举个例子,像在100万个数中查找,用普通的顺序查找法那是相当恐怖的,运气差点就得找100万个数,而如果用二分查找法最多就20次,因为2的20次方就是100万左右。所以用好方法可以让你的代码简洁高效。 O(1)< O(logn)< O(n)< O(n^2) 下面是代码实现二分查找法 #include <iostrea

bying666的博客 737

二分查找法

二分查找法 时间算法度:Θ(lgn)Θ(lgn)Θ(lgn) 该算法主旨: 每次循环迭代查找,都将序列分成两半,再根据判断选择下一个将要分成两半的子序列。 伪代码: /* —————————————————————————————————————————————————— * 二分查找法有两种方法,一个是用循环,一个是利用递归 * ————————————————————————————...

疙瘩村村书记 208

算法与数据结构(七):二分查找法总结

二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,具有很大的应用场景,而在LeetCode中,要运用二分搜索法来解的题目也有很多,但是实际上二分查找法的查找目标有很多种,而且在细节写法也有一些变化。

Dby_freedom的博客 1434

C++实现二分查找法 | 双指针法

注意利用二分查找法,首先应该保证自己的数组是排好序的(一般选择从小到大排序),如果是乱序的话,应该先排好序,再进行查找。 #include <iostream> using namespace std; void find(int arr[], int len, int tar) { int mid = len / 2; int i = 0; int j = len - 1;...

李昊的博客 361

数据结构与算法C++之二分查找法

二叉搜索树一个很广泛的应用是查找问题 解决查找问题的一个基本解法是二分查找法 Binary Search 对于有序数列,才能使用二分查找法 如上图所示,首先找到数列的中间元素,如果等于要查找的元素,查找就停止, 如果不等于,判断是大于中间元素还是小于中间元素,大于的话就对右边数列继续切分查找, 如果小于就对左边数列继续切分查找,直到中间位置的元素等于查找元素位置 下面是程序实现 #include...

恰同学少年的博客 540

二分查找法及变种(c++代码实现)

查找问题是计算机中非常重要的基础问题,本篇主要针对二分搜索树进行深入的探讨。首先我们从最简单的二分查找法开始介绍。 二分查找法 对于有序数列,才能使用二分查找法(先排序!) [分析] 例如,在有序数组中查找元素a 首先,找到数组的中间元素v 由于数组的有序性,所以元素v把数组分为了两个部分 通过比较待查找元素a和中间元素v的关系,缩短查找范围。 若a==v 返回v 若a>v 则在&gt...

weixin_42983849的博客 547

二分查找法(C++篇)

二分查找法 正常实现 设计一个二分查找函数,传入一个升序的vector容器和一个keys,返回keys唯一对应的下标。 Input : [1,2,3,4,5] key : 3 return the index : 2 public int binarySearch(vector<int> nums, int keys) { # 从两端向中间走 int l = 0, h = nums.length - 1; while(l <= h) { i

m0_46246301的博客 671

二分查找法c/c++

二分查找法C语言代码

k1234hxh的博客 419
上一篇: C++ <递归求一个数的N次方(仅限一个数的正数次方)>
下一篇: C++ <类C:单链表的插入、查找、删除>
Okwarry
博客等级 码龄15年 21粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值