c++算法学习笔记 之------- 冒泡法,二分法

我做了个C++算法学习网站,从语法到算法再到数据结构,全方位为算法竞赛小伙伴护航 最近半个月,我做了个《C++算法宝典》并更新了40多篇教程,目前还在更新中,内容从语法到算法和数据结构,全方位为算法竞赛小伙伴护航。 阅读详情

第一:二分法
    将一个排好序列的数组,不断分成两半,然后再可能包含我们所要查找的值的那一部分中搜索。
    缺点:
     1.如果数据里面有两个或两个以上的相同元素,那么二分法就会不确定返回数组的那个值
(下标)。
     2.要求数组必须是有序的,要么从小到大,要么从大到小。

检测数组是否按照顺序排列:
#include<iostream>
using namespace std;
bool add(int a[], int m);
int main()
{
    int a[]={12,23,34,51,3,4,5};
    cout<<"数组前4个元素按照顺序排列,为1则是,为0则否。····"<<add(a,4)<<endl;
 cout<<"数组前7个元素按照顺序排列,为1则是,为0则否。·······"<<add(a,7)<<endl;
return 0;
}

bool add(int a[], int m)
{
  
 for(int i=1;i<m;i++)
      if (a[i]<a[i-1])   //如果改成if (a[i]>a[i+1]) ,会出错, 因为最后一个i=m-1.  m=i+1,a[i+1]==a[m];造成数组越界...

        return false;
        return  true;

}

 

比如1:
#include<iostream>
using namespace std;
int find(int m, int[], int n);
void main()
{
 int a[]={1,2,3,5,6,7,8,9,10,11};
 cout<<"1在数组a中的位置是:"<<find(1,a,11)<<endl;
 cout<<"3在数组a中的位置是:"<<find(3,a,11)<<endl;
}

int find(int m, int a[], int n )
{
 int o=0,h=n-1,i;
 while(o<=h)
 {
      i=(o+h)/2;
  if (a[i]==m)
  {
   return i;
  }
  if (a[i]<m)
  {
   o=i+1;
  }
  else
   h=i-1;
 }
 return n;
}

比如2:
#include<iostream>
using namespace std;
int find(int m, int[], int n);
void main()
{
 int a[]={1,2,3,5,6,7,8,9,10,11};
 int check=find(5,a,10);
 cout<<check<<endl;
  if (check==2)
  {
     cout<<"find zhe number !!"<<endl;
  }

  else
  cout<<"2在数组a中的位置是:"<<check<<endl;
}

int find(int m, int a[], int n )
{
 int o=0,h=n-1,i;
 while(o<=h)
 {
      i=(o+h)/2;
  if (a[i]==m)
  {
   return i;
  }
  if (a[i]<m)
  {
   o=i+1;
  }
  else
   h=i-1;
 }
 return n;
}


二:冒泡法:
把特定输入的数按照从大到校的顺序排列:
分析:
4 3 2 1
第一回(j=1):3 4 2 1       3  2  4  1    3 2 1 4      排列3次(i=4-j=3)
第二回(j=2):2 3 1 4       2  1  3  4                 排列2次 (i=4-j=2)
第三回(j=3):1 2 3 4                                  排列1次  (i=4-j=1)
for(j=0;j<3;j++)
   for(i=0;i<4-j;i++)
{

 

}
#include<iostream>
using namespace std;
int main()
{
 int a[10];
 int i,j,t;
 cout<<"请输入10个数字:"<<endl;
 for (i=0;i<10;i++)
 cin>>a[i];

 for(j=0;j<9;j++)
  for (i=0;i<10-j-1;i++)

     if (a[i]>a[i+1])
     {
         t=a[i];
      a[i]=a[i+1];
      a[i+1]=t;

     }
  
   cout<<"输出这十个数:"<<endl;
 for (i=0;i<10;i++)
 {
    cout<<a[i];
 }
return 0;

}

C++学习顺序 C++是一种支持面向对象、泛型编程和多重编程范式的强大语言。GCC:GNU编译器集合,广泛应用于Linux。:Microsoft开发的强大IDE,适用于Windows。CLion:JetBrains开发的跨平台IDE,支持CMake构建系统。C++是一门功能强大的语言,掌握C++的编程技能需要不断的实践和学习。从基础语法到面向对象编程,再到STL的应用,最后到高级特性如智能指针和多线程编程,每个部分都在C++的学习过程中占有重要位置。 阅读详情

相关推荐

C/C++学习路线总结与分享

C/C++学习路线总结与分享

dvlinker的技术专栏 11万+

C++之算法入门

C++之算法入门: 本文介绍:最大公约数和最小公倍数、单链表、直接插入排序,作为抛砖引玉吧。 一、最大公约数和最小公倍数

cnds123的专栏 3191

PyCharm启动报错急救指南:3步定位.vmoptions文件位置(Win/Mac路径详解)

本文针对PyCharm启动失败问题,提供了一份详细的急救指南。核心在于精准定位并修复关键的.vmoptions配置文件。文章通过三步法详解了在Windows和macOS系统上查找该文件的具体路径,并分析了因新旧版本冲突、破解补丁残留或参数设置错误导致启动失败的常见场景及解决办法,帮助开发者快速恢复IDE的正常工作。

weixin_28835789的博客 702

C++和算法入门——1

C++和算法入门

m0_55303420的博客 921

Win10平台下QT6.9.0 OpenCV 4.10.0从入门到精通

我最近开发一个视觉项目,我们从0开始记录在windows 10下 用QT6.9+OpenCV 4.10.0搞定整个项目的开发过程。以抛砖引玉,大家共同进步。

fds111111的博客 1711

Vivado 2021.1 实战:手把手教你用IEEE1735 V2加密你的Verilog源码(附完整TCL命令)

本文详细介绍了在Vivado 2021.1中使用IEEE1735 V2标准加密Verilog源码的全流程,包括许可证申请、密钥文件配置、TCL命令执行及加密后验证。通过实战步骤和完整TCL命令,帮助开发者有效保护FPGA设计知识产权,确保核心算法安全。

weixin_42706667的博客 187

C++初级算法-学习笔记

c++初级算法

weixin_45735391的博客 2240

统信UOS系统网络服务异常排查:WIFI图标消失与网络设置缺失的解决方案

本文详细解析了统信UOS系统WIFI图标消失与网络设置缺失的常见问题,提供了从基础修复到进阶排查的完整解决方案。重点分析了NetworkManager服务异常的根本原因,包括系统更新中断、权限配置错误等,并给出实用的命令行操作指南和预防措施,帮助用户快速恢复网络功能。

weixin_29234239的博客 614

c++史上最全算法详解,0基础可秒懂!(爆肝4万字)

结构体是一种自定义数据类型,用于将不同类型的数据组合在一起。在C++中,通过struct关键字定义结构体。// 定义结构体int age;// 创建结构体实例// 初始化结构体成员// 输出结构体成员return 0;结构体在竞赛中常用于组织多个属性的数据,如学生的姓名、年龄、分数,或者图中的边的起点、终点、权值等。这样可以更方便地对相关数据进行操作。结构体使得代码更加直观,通过成员变量的命名,可以清晰地了解数据的含义,提升了代码的可读性。

weixin_72389218的博客 8064

光模块MCU开发全解析:从架构原理到固件调试实战

在高速光模块中,MCU并非传统印象里的核心处理器,而是负责数字诊断、闭环控制和协议管理的嵌入式管家。随着800G、1.6T模块的普及,MCU与DSP/SoC的协同、I2C总线通信、ADC采集、APC/TEC控制等低速域任务愈发关键。理解MCU的选型规格、启动流程和固件设计,是保障光模块稳定运行的基础。本文从光模块架构切入,剖析MCU的角色定位,详细拆解I2C从机实现、电芯片配置、校准与升级等工程细节,并结合实际调试经验梳理常见故障与排查思路,为嵌入式工程师提供一份可落地的光模块MCU开发指南。

weixin_29192365的博客 363

EnlightenGAN训练复现记录

记录EnlightenGAN过程中的问题和解决方式。提示:以下是本篇文章正文内容,下面案例可供参考。

L_27N113E的博客 3846

C/C++ 算法基础

我们以简单程序Hello World为例说明程序的基本框架。此程序在屏幕上输出一行“Hello World!}这段程序包括二个部分:1.#include #include是C语言的保留字,表示要把另一个文件中的内容包含在本文件中。是被包含的文件的文件名。C语言中提供了一些可以被直接拿来使用、能够完成某些特定功能的库函数,分别声明于不同的头文件中。例如:stdio.h中定义了一些与输入输出有关的函数。

纵横千里 捭阖四方 的专栏 1万+

如何用 Claude Code 阅读和理解陌生代码

摘要: 在接手陌生代码时,Claude Code能显著提升理解效率。核心策略是结构化拆解而非逐行阅读: 从整体入手:先扫描目录结构、定位核心模块,建立项目地图; 聚焦关键路径:通过数据流追踪、异常逻辑分析,识别技术债与风险点; 规避常见错误:避免抽象提问或一次性提交全部代码,应分模块精准提问; 高阶应用:可生成逻辑分层图、标记高复杂度区域,甚至定制阅读顺序。 最终目标是通过结构优先的提问策略,将理解周期从数天压缩至数小时。

sg_knight的专栏 1019

Spring-_-Bear 的 优快云 博客导航

路漫漫其修远兮,吾将上下而求索。

春天熊的技术博客 8082

《AgentScope-Java 深入浅出教程》第8章 工具高级特性

掌握工具组、预设参数、执行上下文等高级特性。

步子哥的博客 265

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

c++算法知识点简括

本文主要分为以下几个部分:基本算法、数组和字符串、链表、栈和队列、树和图、排序算法、搜索算法、动态规划、贪心算法、回溯算法、图算法。- 数组和字符串的常见问题:包括数组的旋转、矩阵的转置、字符串的反转和替换等问题。- 链表的常见问题:包括链表的反转、链表的合并、链表的环检测和链表的排序等问题。- 数组的基本操作:包括数组的创建、访问、遍历、插入和删除等操作。- 队列的基本操作:包括队列的创建、入队、出队和队列的大小等操作。- 栈的基本操作:包括栈的创建、入栈、出栈和栈的大小等操作。

weixin_72389218的博客 670

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【C++算法/学习】:位运算详解,看这篇就够了

✨🌏📃:在计算机内部,数是以「二进制(Binary)」的形式来进行存储。位运算就是直接对数的二进制进行计算操作,在程序中使用位运算进行操作,会大大提高程序的性能。:由 0 和 1 两个数码来表示的数。二进制数中每一个 0 或每一个 1 都称为一个「位(Bit)」。1. 位运算的运算符2. 位运算的性质。

island1314的博客 9111

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++各阶段算法学习

本文系统介绍了C++信息学竞赛算法学习的路径与方法,从基础语法到高级算法,分为多个学习阶段。第一部分详细讲解基础语法与简单算法(0-3个月),包括输入输出、条件判断、循环结构、数组操作和函数编程等核心知识点。通过代码示例演示了基本运算、分支选择、循环控制、数组处理以及函数参数传递等关键概念,强调动手实践和算法复杂度分析的重要性。文章采用循序渐进的方式,为初学者构建完整的算法知识体系框架,适合信息学竞赛选手系统学习参考。

as_asdf的博客 1286

C C++最全算法笔记(一)(教你系统学习基础算法)(1),2024年最新【微信小程序】

第一行包含整数 nn,表示数列的长度。第二行包含 nn 个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围数列中的元素的取值范围 [1,109][1,109]。5核心思路:依然是把数组先拆分成小数组,我们总的逆序对数量=左段逆序对数+右端逆序对数+合并时产生的逆序对数(p1指针后的所有数都大于当前数)

2401_84978642的博客 844

c++:算法(Algorithms)

C++ STL(标准模板库)中的算法是 STL 的三大核心组成之一,另外两个是和。STL 提供了大量的泛型算法,这些算法不依赖于特定容器,而是通过迭代器操作容器中的元素。这一设计体现了 STL 的高度抽象性和复用性。

2402_88047672的博客 1126

Java进阶——数组中常见的算法

排序算法: 冒泡排序算法 选择排序算法 查找算法: 二分法查找 以上算法在以后的java实际开发中我们不需要使用的。 因为java已经封装好了,直接调用就行 只不过以后面试的时候,可能会有机会碰上 算法实际上在java中不需要精通,因为java中已经封装好了,要排序就调用方法就行。例如:java中提供了一个数组工具类: java.util.Arrays Arrays是一个工具类。其中有一个sort()方法,可以排序。静态方法,直接使用类名调用就行。 冒泡排序 参与比较的数据:9 8 10 7 6 0

LiLi的博客 353

c++算法入门教程(1)

C++是一种功能强大且广泛应用的编程语言,对于想要深入学习编程和算法的人来说,掌握C++是一个重要的里程碑。本文将带你逐步了解C++编程的基础知识,帮助你快速入门。

有求必应,有问必答(只要是我能解决的) 1813

学习笔记 基础算法(C++)

哈希算法是一种重要的技术,其在计算机科学和信息安全领域有着广泛的应用。选择适当的哈希算法对于确保数据的安全性和完整性至关重要。在现代应用中,推荐使用SHA-256及以上版本或专门的密码哈希函数(如bcrypt、Argon2)来处理敏感数据。

AIshixian的博客 719

c++算法-第一天学习

因此我们在寻找一个数组的最大最小值时可以使用min_element函数或max_element函数,但与前面不同的是它们返回的是地址,在输出值时需要加上取值符号。它会将原本的数组按照字典排为下一个顺序,并返回bool值true。给定一个长度为 N 的数组 A,请你先从小到大输出它的每个元素,再从大到小输出它的每个元素。输入的第一行包含一个整数 n (1≤n≤10^4)n (1≤n≤10^4),表示考试人数。接下来 n行,每行包含一个 0 至 100 的整数,表示一个学生的得分。

Yeung_y的博客 1660

算法学习路线总结: 算法工程师的修炼手册

在算法工程师的学习之路上,经常被问到的问题就是“应该如何系统地学习算法?那,今天,它来了!我将为大家详细解读算法工程师的学习路线,不仅包括基础理论知识,还涵盖实战经验和项目实践。为了更好地帮助大家,我还专门收集整理了配套的视频教程、教材推荐以及刷题网站等资源。

码到三十五 12万+

c++基础 STL最终篇:(仿函数和STL中常用算法)

文章目录一 仿函数1 基本概念2 仿函数的使用3 谓词二 STL中常用的算法1 遍历算法1) for_each 函数2)transform 函数2 查找算法 一 仿函数 1 基本概念 仿函数本质就是一个类的对象,类里面重载了小括号( ),由于创建对象时候,类似于函数调用,所以我们叫它为仿函数。我们通常也叫仿函数为函数对象。 2 仿函数的使用 仿函数在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值; 仿函数超出普通函数的概念,函数对象可以有自己的状态 仿函数可以作为参数传递 上诉的使用本质就是

呋喃吖的博客 729
上一篇: c++构造函数解析
下一篇: (转)C++总结 ----- 虚函数和多态性(一)
EmbeddedLong
博客等级 码龄16年 79粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值