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

避开这些坑!用Python ReportLab生成PDF时字体处理与中文排版的5个关键技巧

本文针对Python ReportLab库在PDF自动化生成中常见的中文排版难题,提供了五个关键技巧。内容涵盖字体注册的稳健策略、段落样式的精细控制、表格内中文的换行对齐、页面布局管理以及性能优化,旨在帮助开发者彻底解决中文乱码、排版错位等问题,生成专业美观的PDF文档。

weixin_29250403的博客 624

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

查找算法, 二分查找

zsysingapore的博客 375

从零实现高精度手势检测:OpenCV+MediaPipe模型移植实战(2)(附c++完整代码)

上篇已经介绍了手掌检测的方法。本章将在手掌检测的基础上,完成手指关节的检测。

qq_37160641的博客 2667

基于ASP.NET+SQLServer的美妆网站的设计与实现

通过本次ASP.NET MVC美妆商城项目的开发,我们实现了一个功能完善、性能稳定的在线购物平台。该项目不仅提升了用户的购物体验,也为商家提供了一个高效的商品管理和销售渠道。未来,我们将持续优化系统功能,提升用户体验,以适应不断变化的市场需求。

毕业设计大牛哥 1500

C++二分查找

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

m0_61033277的博客 4893

避免bank conflict的使用共享内存的矩阵转置。及其循环展开。转置前后都是行主序,中间共享内存中是列主序

为了避免bank conflict,可以使用padding的方式将数组中的每一行各自占据一个bank,这样每个线程读取不同行的数据时就不会发生bank conflict。padding的方式是在每行数据后面添加一定数量的空数据,使得每行的字节数恰好是bank的整数倍,这样就能保证每行数据各自占据一个bank。具体来说,当一个线程访问共享内存中的一个元素时,GPU会根据该元素在共享内存中的地址计算出其所在的bank,然后将该元素从该bank中读取出来。

weixin_55035144的博客 2144

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

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

CC_fighting的博客 1万+

19、英国模式:银行体系的演变与现代金融架构

本文深入探讨了英国银行体系从专业化向全能银行的演变过程,分析了自律监管模式的优劣,并解析了围栏制度对金融稳定的影响。同时,文章还介绍了信用合作社、建筑协会和投资银行的角色与转型,全面展示了英国金融体系的多样性与复杂性,以及其在全球金融市场中的重要作用。

embedding5hiker的博客 105

零差云控 ZeroErr eRob 电机 CAN、CANopen、EtherCAT、ROS2 机器人开发详细教程

TwinCAT 3(Windows 控制与自动化技术)是 Beckhoff 提供的开发平台,可将任何兼容 PC 转变为实时控制系统,用于管理各种类型的工业自动化系统,如 PLC(可编程逻辑控制器)、运动控制、机器人等。

机器人控制与仿真应用 1万+

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

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

Qhumaing的博客 2001

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能。本篇文章主要介绍如何使用xlwings对Excel表格进行多行多列数据设置和操作,并给出相应的源代码。接着,我们可以对这个范围内的所有单元格进行操作,如设置字体颜色、填充颜色、对齐方式等。以上就是使用xlwings对Excel表格进行多行多列数据操作和设置字体颜色、填充色和对齐方式的全部内容。最后,我们可以将数据写入到单元格中,也可以从单元格中读取数据。在Excel中,可以通过。

BUG?不存在的! 713

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

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

麻垌小酷的博客 423

EtherCAT主站SOEM -- 1 -- SOEM之ethercattype.h文件分析

“ethercattype.h” 文件用于支持 EtherCAT 网络通信,提供了各种类型定义和宏,以便开发者更轻松地开发 EtherCAT 相关应用程序。这些定义包括数据类型、命令类型、状态类型和错误类型,以支持 EtherCAT 通信。根据具体应用需求,还可以调整一些超时和帧长度设置。这些定义用于处理函数调用的结果,如 EC_NOFRAME(没有帧返回)、EC_ERROR(一般错误)、EC_TIMEOUT(请求超时)等。这些定义用于处理 EtherCAT 命令,例如 EC_CMD_APRD(自动递增读取

常驻客栈的博客--嵌入式EtherCAT 2715

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

时光札记 1237

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

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

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

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

NEUChords的博客 3232

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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、付费专栏及课程。

余额充值