简单排序 冒泡排序详解 C语言入门

2023-11-15

欢迎关注笔者,你的支持是持续更博的最大动力

问题描述

给n个数按从小到大排序 (冒泡排序)

思路

在这里插入图片描述

冒泡排序:把无序部分最大元素移动到有序部分第一个元素的左边。
1.一开始数列中所有元素都是无序的;
2.从最左开始往右,相邻无序元素两两比较,大的放右边,直到最后一对无序元素比完,使得最大无序元素放在无序部分最右边;
3.标记最右边的无序元素为有序元素,无序元素-1;
4.重复2~3操作;

直到没有无序元素。这样,大的元素就像水里气泡一样不断往上浮。


关于怎么换位置:
在这里插入图片描述
在这里插入图片描述


代码

代码思路

因为无序部分排序后,最右边的最大元素会被标记为有序,所以左边无序部分会缩短,右边有序部分会扩张,此消彼长,且有序部分不需要再排序,那么只要标记好无序和有序部分之间的三八线,只排序无序部分就好:

  • 找到三八线,明确位置0~三八线内都是无序元素;
  • 从位置0开始,把相邻无序元素两两排序,直到无序部分上限(最后一对的右边元素不超过三八线):
    – 两两比较,大的放右边,小的放左边;
    – 比较下一对;
  • 把最右边的最大元素的位置,标记为新的三八线;
  • 重复上述操作

在这里插入图片描述

void BubbleSort(int a[], int size){       //a[]:要排序的数组,size:数组大小,函数返回值:无,类型写void
    for (int i = size-1; i > 0; --i) {    //找三八线:i表示无序部分上限(图中最右边黄格子);由图可知,0~i为无序部分,i从size-1开始逐渐递减至1(最后一对要比较的是位置0和1的元素,上限是1,如果i为0,不会进入下层for循环)
        for (int j = 0; j < i; ++j) {     //给无序部分两两排序:j表示每一对左边元素的位置,所以j从0开始,最多到j=i-1(a[i-1]和a[i]),也就是j<i;如果j=i, 当i=size-1的时候,a[j+1]就是a[size],会超出数组范围,操作互换位置时候,会把数组外的内容弄进数组里面,导致排序出错
            if (a[j] > a[j+1]){           //如果前面元素比后面元素大,互换位置:
                int tmp = a[j+1];         //先把右边元素放到临时位,空出右边位置
                a[j+1] = a[j];            //再把左边大的元素放到右边
                a[j] = tmp;               //把临时位里原右边元素放到左边
            }
        }
    }
}
//用冒泡排序函数BubbleSort给 3 2 1 5 排序, 输出: 1 2 3 5
int main(){
    int a[] = {3,2,1,5};
    BubbleSort(a, 4);
    for (int i = 0; i < 4; ++ i) {
        cout << a[i] << " ";
    }
}

相关内容

其他

日常vlog: 点这里去B站~


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单排序 冒泡排序详解 C语言入门 的相关文章

  • 1030 完美数列 (25 分)

    题目 题目链接 题解 思维 从小到大排序后 从左开始选取一个数作为 m m m 二分选取右边的数作为 M M M 时间复杂度 O
  • 计算方法——C语言实现——全主元高斯消元法求解非线性方程

    最近在上计算方法这门课 要求是用MATLAB做练习题 但是我觉得C语言也很棒棒啊 题目 高斯消元法是线性方程组的直接解法 可能会造成很大的失真 尤其是高斯顺序消元法 对方法进行改进 使每次都选取绝对值最大的元素为主元 使其为乘数的分母 控制
  • MySQL安装配置教程-win10

    一 下载MySQL Mysql官网下载地址 https downloads mysql com archives installer 选择想要安装的版本进行下载 我这是使用的是5 6 21 二 安装MySQL 选择设置类型 双击运行mysq

随机推荐

  • 使用flask开启一个简单的应用

    Flask是非常流行的 Python Web框架 它能如此流行 原因主要有如下几点 有非常齐全的官方文档 上手非常方便 有非常好的扩展机制和第三方扩展环境 工作中常见的软件都会有对应的扩展 自己动手实现扩展也很容易 社区活跃度非常高 微框架
  • 数据分析 —— 数据挖掘是什么、能干嘛、怎么做

    数据分析 数据挖掘 什么是数据挖掘 数据挖掘 用于寻找数据中隐含的知识 并用于产生商业价值的一种手段 为什么要做数据挖掘 技术和商业就像一对双生子 在互相促进中不断演进发展 随之而来的就是个大公司的业务的突飞猛进 也涌现出很多的新模式 使得
  • MSYS2 如何切换镜像源(附带脚本自动修改)

    这篇文章将总结 如何切换MSYS2镜像 其实比较简单 但还是记录一下吧 下面示例中附带一个脚本 这样你就不用一个个手动修改了 1 镜像服务配置文件 MSYS2 的所有镜像服务配置 都在其安装路径下的etc pacman d目录下 可以看到
  • SpringBoot设置和读取配置文件(1)

    SpringBoot配置文件是用来保存SpringBoot项目当中所有重要的数据的 比如说数据库连接信息 数据库的启动端口 如果端口被占用了 那么就可以随时修改 1 比如说我们之前再写JDBC的代码的时候 要去写链接字符串 用户名密码 之前
  • 进化计算-遗传算法之史上最全选择策略

    获取更多资讯 赶快关注上面的公众号吧 文章目录 第十九章 遗传算法 史上最全选择策略 19 1 轮盘赌选择 Roulette wheel selection 19 2 锦标赛选择 Tournament selection 19 3 截断选择
  • 研究B站个人收藏中已失效的视频

    扩展阅读 b站收藏的已经失效视频怎么才能继续看到呢 话说B站被删的视频还有机会恢复吗 还有该网址内容存在未知风险这种操作的么 研究B站已失效的视频 目录 1 前言说明 2 获取和研究网页源代码 3 获取和研究 JSON 文件 4 其他途径的
  • java的示例题3

    前言 整理一部分java的示例题型 在线编译 入口 java的System out println与System out print 浩星 CSDN博客前言 java基础知识之System out println System out pr
  • Python爬虫进阶——Scrapy框架原理及分布式爬虫构建

    1 Scrapy简介 1 1 概念 Scrapy是由Python语言开发的一个快速 高层次的屏幕抓取和web信息抓取框架 用于抓取web站点并从页面中提取结构化的数据 Scrapy用途广泛 可以用于数据挖掘 监测和自动化测试 Scrapy还
  • Ubuntu yolov5 环境配置

    查看Ubuntu版本 cat proc version Linux version 5 4 0 150 generic buildd bos03 amd64 012 gcc version 7 5 0 Ubuntu 7 5 0 3ubunt
  • git submodule的使用

    Git 工具的 submodule 功能就是建立了当前项目与子模块之间的依赖关系 子模块路径 子模块的远程仓库 子模块的版本号 添加submodule git submodule add
  • RESTful接口规范(带案例)

    一 主要特征 以资源为基础 Rest是web服务的一种设计思想和风格 只要符合REST原则 即为RESTful URL只指定资源 以HTTP方法动词进行不同的操作 统一接口 对资源的操作包括获取 创建 修改和删除 这些操作正好对应HTTP协
  • 摸鱼的小贤在瞎搞R - R语言内置数据集的使用

    系列文章目录 1 R语言的安装及使用 还没写这个 太简单了不太想写 2 R语言内置数据集的使用 文章都会尽量详细 话多请见谅 我是话痨 文章目录 系列文章目录 1 查看包中有哪些数据集 2 查看某一特定数据集的基本信息 3 调用内置数据集
  • BIEE Demo(RPD创建 + 分析 +仪表盘 )

    一 环境准备 日期维度 CREATE TABLE SCOTT DIM DATE DAY KEY NUMBER NULL YEAR NUMBER NULL MONTH NUMBER NULL YEAR MONTH VARCHAR2 7 CHA
  • 北斗船载终端定位导航系统解决方案

    一 方案背景 近年来 随着江河运输行业的发展和转型 船舶逐渐向大型化 智能化以及高速化的方向发展 对于整个航运业而言 愈加复杂的环境 包括自然环境以及各类突发人为事件 使得人们意识到与船舶建立良好的通信以及对船舶动态监控的重要性 北斗导航定
  • vba:消息框基础,msgbox

    常量 常量值 说明 vbOKOnly 0 只显示 确定 按钮 缺省值 VbOKCancel 1 显示 确定 和 取消 按钮 VbAbortRetryIgnore 2 显示 终止 重试 和 忽略 按钮 VbYesNoCancel 3 显示 是
  • 基于径向基(RBF)神经网络的非线性系统识别及 MATLAB 代码实现

    基于径向基 RBF 神经网络的非线性系统识别及 MATLAB 代码实现 简介 在实际工程应用中 很多系统都是非线性的 这时需要对其进行建模和预测 本文讨论了一种基于 RBF 神经网络的非线性系统识别方法 并提供相应的 MATLAB 代码实现
  • 入门图像处理与图像识别的知识框架

    小白一枚 和大家共同学习 编程基础 C 曾经我想用python来做图像处理 后来发现无论是二维图像处理 opencv 还是三维点云处理 PCL 都得学C 数据结构与算法 设计程序的基础课程 编译原理 操作系统 并行计算算法 linux等知识
  • Authz和AuthzMatrix 逻辑越权工具

    目录 一 Authz 1 下载 2 使用 1 截获数据包 2 测试 三 Authzmatrix的安装和使用 1 配置jython环境 1 官网下载 2 点击下载 3 在burpsuite里导入 2 在bapp store下载Authzmar
  • Protobuf使用手册

    Protobuf使用手册 第1章 定义 proto 文件 首先我们需要编写一个 proto 文件 定义我们程序中需要处理的结构化数据 在 protobuf 的术语中 结构化数据被称为 Message proto 文件非常类似 java 或者
  • 简单排序 冒泡排序详解 C语言入门

    欢迎关注笔者 你的支持是持续更博的最大动力 目录 问题描述 思路 代码 相关内容 其他 问题描述 给n个数按从小到大排序 冒泡排序 思路 冒泡排序 把无序部分最大元素移动到有序部分第一个元素的左边 1 一开始数列中所有元素都是无序的 2 从