冒泡排序知识点

排序的基本概念

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录调整为“有序”的记录序列。

常用的排序例子

8 7 1 5 4 2 6 3 9

把上面的这个无序序列变为有序(升序或者降序)序列的过程。

1 2 3 4 5 6 7 8 9(升序)

9 8 7 6 5 4 3 2 1(降序)

在程序中,序列一般存储在数组当中。

所以排序往往是对数组进行排序。

int[] arr = new int[] { 8, 7, 1, 5, 2, 6, 3, 9, };

把数组里面的内容变为有序的。

排序图解

代码实现

第一步,如何比较数组中两两相邻的数

8, 7, 1, 5, 4, 2, 6, 3, 9

从头开始

//第n个数和第n+1个数比较
//for (int n = 0; n < arr.Length - 1; n++)
//{
//    //如果第n个数比第n+1个数大,它们就要交换结果
//    if (arr[n] > arr[n + 1])
//    {
//        //第二步,交换位置
//        //中间商不赚差价
//        int temp = arr[n];
//        arr[n] = arr[n + 1];
//        arr[n + 1] = temp;
//    }
//}
//第三步,如何交换n轮呢?
for (int m = 0; m < arr.Length - 1; m++)
{
    //进一次循环,就需要比较一轮
    for (int n = 0; n < arr.Length - 1; n++)
    {
        //如果第n个数比第n+1个数大,它们就要交换结果
        if (arr[n] > arr[n + 1])
        {
            //第二步,交换位置
            //中间商不赚差价
            int temp = arr[n];
            arr[n] = arr[n + 1];
            arr[n + 1] = temp;
        }
    }
}

for (int i = 0; i < arr.Length; i++)
{
    Console.WriteLine(arr[i]);
}
//第四步 优化
//1.确定位置的数字,不用比较了
//确定了一轮后,极值(最大或者最小)已经放到了对应的位置(往后放)
//所以每完成n轮,后面位置的数就不用再参与比较了
for (int m = 0; m < arr.Length - 1; m++)
{
    //进一次循环,就需要比较一轮
    for (int n = 0; n < arr.Length - 1 - m; n++)
    {
        //如果第n个数比第n+1个数大,它们就要交换结果
        if (arr[n] > arr[n + 1])
        {
            //第二步,交换位置
            //中间商不赚差价
            int temp = arr[n];
            arr[n] = arr[n + 1];
            arr[n + 1] = temp;
        }
    }
}

for (int i = 0; i < arr.Length; i++)
{
    Console.WriteLine(arr[i]);
}

特殊情况的优化

//外面声明一个标识来表示,该轮是否进行了交换
bool isShort = false;
for (int m = 0; m < arr.Length - 1; m++)
{
    //每一轮开始时,默认没有进行过交换
    isShort = false;
    //进一次循环,就需要比较一轮
    for (int n = 0; n < arr.Length - 1 - m; n++)
    {
        //如果第n个数比第n+1个数大,它们就要交换结果
        if (arr[n] > arr[n + 1])
        {
            isShort = true;
            //第二步,交换位置
            //中间商不赚差价
            int temp = arr[n];
            arr[n] = arr[n + 1];
            arr[n + 1] = temp;
        }
    }
    //当一轮结束后,如果isShort这个标识还是false
    //那就意味着,已经是最终的荀烈了,不需要再判断交换了
    if (!isShort)
    {
        break;
    }
}

for (int i = 0; i < arr.Length; i++)
{
    Console.WriteLine(arr[i]);
}

小结:

基本概念

两两相邻

不停比较

不停交换

比较m轮

套路写法

两层循环

外层循环

内层循环

两值比较

满足交换

如果优化

1.比过不比

2.加入bool

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求

测试表现层的代码如何测试 加载测试的专用属性 首先写一个测试 假定我们进行测试的时候要加一些属性 要去修改一些属性 我们可以写一个只在本测试有效的测试 写在配置里 测试 打印输出 我们把配置文件里面的配置注释掉后 我们同样可以启动 package com.example.demo;impo…

代码随想录——组合总和Ⅱ(Leetcode 40)需要回顾

题目链接 回溯 本题的难点在于&#xff1a;集合&#xff08;数组candidates&#xff09;有重复元素&#xff0c;但还不能有重复的组合。 思想&#xff1a;元素在同一个组合内是可以重复的&#xff0c;怎么重复都没事&#xff0c;但两个组合不能相同。所以要去重的是同一树…

购物车店铺列表查询流程

购物车店铺列表查询流程 购物车结算流程图

嵌入式门槛高不高,工资怎么样?

一般来说&#xff0c;嵌入式岗位的准入门槛其实并不是特别高。通常情况下&#xff0c;只要能够熟练掌握 C 语言编程以及单片机相关知识&#xff0c;就能够去制作一些较为简单的电子产品&#xff0c;由此可见其门槛相对而言是比较低的&#xff0c;相应的薪水可能也不会特别高。 …

I2C 总线通信技术基础

1.0 I2C 技术基础 使用总线的目的&#xff1a;采用串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高&#xff0c;同时&#xff0c;系统的更改和扩充变的极为容易。 通信中常用的串行拓展总线 I2C&#xff08;Inter-Integrated Circuit &#xff09;总线…

C语言程序设计-6 循环控制

C语言程序设计-6 循环控制 循环结构是程序中一种很重要的结构。其特点是&#xff0c;在给定条件成立时&#xff0c;反复执行某程序 段&#xff0c;直到条件不成立为止。给定的条件称为循环条件&#xff0c;反复执行的程序段称为循环体。&#xff23;语 言提供了多种循环语句&a…

计算机网络知识点全面总结回顾

物理层 OSI模型&#xff1a;数据链路层&#xff08;流量控制&#xff09;&#xff0c;从传输层开始端到端&#xff1b;每一层的元素都称为实体&#xff0c;同一层的是对等实体&#xff1b;三个重要概念&#xff1a;服务&#xff08;下层为上层提供调用&#xff09;&#xff0c…

【Linux】进程间通信1——管道概念,匿名管道

1.进程间通信介绍 进程是计算机系统分配资源的最小单位&#xff08;严格说来是线程&#xff09;。每个进程都有自己的一部分独立的系统资源&#xff0c;彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作&#xff0c;才有了进程间通信。 进程间通信&#xff0c;顾名…

1055 集体照(测试点3, 4, 5)

solution 从后排开始输出&#xff0c;可以先把所有的学生进行排序&#xff08;身高降序&#xff0c;名字升序&#xff09;&#xff0c;再按照每排的人数找到中间位置依次左右各一个进行排列测试点3&#xff0c; 4&#xff0c; 5&#xff1a;k是小于10的正整数&#xff0c;则每…

记录一次root过程

设备: Redmi k40s 第一步&#xff0c; 解锁BL&#xff08;会重置手机系统&#xff01;&#xff01;&#xff01;所有数据都会没有&#xff01;&#xff01;&#xff01;&#xff09; 由于更新了澎湃OS系统, 解锁BL很麻烦, 需要社区5级以上还要答题。 但是&#xff0c;这个手机…

人工智能历史与现状

1 人工智能历史与现状 1.1 人工智能的概念和起源 1.1.1 人工智能的概念 人工智能 (Artificial Intelligence ,AI)是一门研究如何使计算机 能够模拟人类智能行为的科学和技术,目标在于开发能够感知、理解、 学习、推理、决策和解决问题的智能机器。人工智能的概念主要包含 以…

理解DDD设计

DDD的理解 领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;是一种软件开发方法论&#xff0c;强调将业务领域作为软件设计的核心&#xff0c;以便更好地满足业务需求。DDD认为&#xff0c;软件开发的核心是理解业务&#xff0c;而不是实现技术。在D…

容器镜像外网同步方案

目录 一、目的 二、安装nexus 1、购买香港云主机​编辑 2、安装nexus 3、启动nexus 服务 4、放行安全组 三、配置nexus 1、登录nexus管理页面 2、修改nexus密码 3、创建 Blob 存储空间(可选) 4、创建 镜像代理仓库 5、Realms配置 四、拉取镜像 1、配置docker 2、…

【Python】Python实现解压rar文件

Python实现解压rar文件 零、需求 最近在开发一个填分数的应用&#xff0c;需要用到selenium&#xff0c;那么自然需要用到浏览器&#xff0c;浏览器内置到应用中&#xff0c;但是上传到GitCode的时候被限制了&#xff0c;单个文件大小只能是10M以内。所以只能压缩&#xff0c…

免费个人站 独立站 wordpress 自建网站

制作免费网站 | 免费网站构建器 | WordPress.com https://bioinformatics7.wordpress.com WordPress.com

运算符分为哪几类?哪些运算符常用作判断?简述运算符的优先级

运算符包含6大类&#xff1a;算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元&#xff08;目&#xff09;运算符。 逻辑运算符常用作布尔判断 typeof 运算符: typeof 运算符用于确定变量或表达式的数据类型&#xff0c;并返回一个表示类型的字符串。 typeof …

力扣 SQL题目

185.部门工资前三高的所有员工 公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。 编写解决方案&#xff0c;找出每个部门中 收入高的员工 。 以 任意顺序 返回结果表。 返回结果格式如下所示。 …

MFC工控项目实例之四在调试目录下创建指定文件夹

承接专栏《MFC工控项目实例之三theApp变量传递对话框参数》 在调试目录Debug下创建DATA、LIB、TEMP三个文件夹 1、SEAL_PRESSURE.h中添加代码 class CSeatApp : public CWinApp { ... public:CString m_Path;CString m_DataPath,m_TempPath,m_LibPath; ... };2、SEAL_PRESSURE…

leetcode 130被围绕的区域

思路 一个区域不能被围绕是这个区域有部分在边界 可以循环边界&#xff0c;找边界的区域&#xff08;利用深搜&#xff09;&#xff0c;这些都不能被围绕&#xff0c;其余的&#xff0c;能被围绕&#xff0c;应该从"O"变为”X“ 代码 static boolean[][] hasGo;/…

sigmoid函数

σ ( x ) 1 1 e − x \sigma(x)\frac1{1e^{-x}} σ(x)1e−x1​ sigmoid函数好处 1. σ ( x ) \sigma(x) σ(x)的域值是[0,1] &#xff0c;在(-∞, ∞)单调递增&#xff0c;很符合概率分布函数的特点 2.以 σ ( x ) \sigma(x) σ(x)为分布函数的概率密度函数在远离零点的位置…