C#冒泡排序算法

2023-11-20

d3f2d0565d34945bf81ae0c86d57f9e9.png

78404e47aec385e24534d643ea09cb9c.jpeg

冒泡排序实现原理

冒泡排序是一种简单的排序算法,其原理如下:

  1. 从待排序的数组的第一个元素开始,依次比较相邻的两个元素。

  2. 如果前面的元素大于后面的元素(升序排序),则交换这两个元素的位置,使较大的元素“冒泡”到右侧。

  3. 继续比较下一对相邻元素,重复步骤2,直到遍历到数组的倒数第二个元素。此时,最大的元素会被交换到数组的最后一个位置。

  4. 针对剩余尚未排序的元素,重复步骤1到步骤3。每次遍历过程中,最大的元素都会被放置到正确的位置上。

  5. 持续以上操作,直到所有元素都按照指定的顺序排列为止。

冒泡排序图解

1de8eecde221f752321734472d1ff4c8.gif

冒泡排序实现的2种方式

双重循环方式实现冒泡排序

/// <summary>
        /// 双重循环方式实现冒泡排序
        /// </summary>
        public static void BubbleSort()
        {
            int[] arr = { 1, 8, 9, 5, 6, 2, 3, 4, 7 };
            int arrLength = arr.Length;
            for (int i = 0; i < arrLength - 1; i++)
            {
                for (int j = 0; j < arrLength - i - 1; j++)
                {
                    if (arr[j] > arr[j + 1])
                    {
                        //交换arr[j]和arr[j+1]的值
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }

            Console.WriteLine("排序后结果:" + string.Join(", ", arr));
        }

递归方式实现冒泡排序

/// <summary>
        /// 递归方式实现冒泡排序
        /// </summary>
        /// <param name="arr">arr</param>
        /// <param name="arrLength">arrLength</param>
        public static void RecursiveBubbleSort(int[] arr, int arrLength)
        {
            if (arrLength == 1)
                return;

            for (int i = 0; i < arrLength - 1; i++)
            {
                if (arr[i] > arr[i + 1])
                {
                    //交换arr[i]和arr[i+1]的值
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }

            RecursiveBubbleSort(arr, arrLength - 1);
        }

        public static void RecursiveBubbleSortRun()
        {
            int[] arr = { 1, 8, 9, 5, 6, 2, 3, 4, 7 };
            int arrLength = arr.Length;
            RecursiveBubbleSort(arr, arrLength);
            Console.WriteLine("排序后结果:" + string.Join(", ", arr));
        }

总结

冒泡排序的名称来源于元素比较过程中,较大的元素会逐渐向右“冒泡”到正确的位置上。它的时间复杂度为O(n^2),在实际应用中适用于数据规模较小的情况。在实际应用中,我们需要根据具体情况选择合适的实现方式来平衡代码的可读性和排序效率。同时,如果对排序算法的效率要求较高,可以考虑使用其他更高效的排序算法,如快速排序或归并排序。

参考文章

https://blog.csdn.net/qq_45019143/article/details/109961460

ec049f5073c5db8f719644a888ec23dd.gif

-

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

学习是一个永无止境的过程,你知道的越多,你不知道的也会越多,在有限的时间内坚持每天多学一点,你一定能成为你想要成为的那个人。不积跬步无以至千里,不积小流无以成江河!!!

90cdb7eabb0efcd7e5b096ae8baae7b5.gif

See you next good day

3227f50a60c8ddf9b02fdbd3692f05a8.gif

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

C#冒泡排序算法 的相关文章

随机推荐

  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • adb链接夜神模拟器以及常用的adb命令整理

    夜神模拟器链接adb 1 打开夜神模拟器 打开设置 调成手机模式 初次进入的话 进入设置 点击版本号5次 可以激活使用开发者模式 进入后打开USB调试功能 2 打开文件资源管理器 进入夜神模拟器的安装位置 在地址栏输入cmd 回车 会打开c
  • 步进电机基础(5.6)-步进电机的驱动与控制-闭环控制

    步进电机基础 5 6 步进电机的驱动与控制 闭环控制 前言 基本信息 前言说明 5 6 闭环控制 前言 基本信息 名称 描述说明 教材名称 步进电机应用技术 作者 坂本正文 译者 王自强 前言说明 根据我读的 步进电机应用技术 这本书 进行
  • linux下动态共享库的创建,使用与更新(包括ldconfig的使用) 分类: Linux/Unix 2010-09-23 16:50 701人阅读 评论(0) 收藏 举报 linuxlibraryp

    linux下动态共享库的创建 使用与更新 包括ldconfig的使用 分类 Linux Unix 2010 09 23 16 50 701人阅读 评论 0 收藏 举报 linux library path file object cache
  • KMP求重复字符串——HDU1358

    这个题目蛮有意思的 大家都说用到了什么KMP的灵魂 next 数组的应用 可是也没见哪个人给我来个很正式的数学推导 到最后也只是看到了一个博客上写的是由观察得来的结论 http blog csdn net lizhihaoweiwei ar
  • Visual studio 2005 hangs on startup AppHangXProcB1 svchost devenv.exe svchost.exe:{2a811bb2-303b-48b...

    This problem has been torturing me for the whole afternoon and after searching on the web for a long time I finally get
  • amd关闭超线程_直接提高40帧?超线程开启/关闭游戏对比测试

    CPU处理器的核心数在不断提升 如今桌面端消费级市场基本起步都是4核心 高端一些的都达到了8核心 AMD甚至在去年还推出了16核心32线程的处理器 多核心线程的CPU在应用中会有更多的表现机会 而处理器能实现更多核心线程则依靠了英特尔和AM
  • Spring IOC容器

    什么是IOC IOC Inverse of Control 控制反转 将对象的创建权力反转给Spring框架 在java当中一个类想要使用另一个类的方法 就必须在这个类当中创建这个类的对象 那么可能会出现如下情况 比如A类当中创建着B对象
  • es6-promise学习与使用【含真实接口】

    es6 promise学习与使用 es6 promise介绍与基本使用 promise是ES6引入的异步编程的新解决方案 语法上市promise是一个构造函数 用来封装异步操作并可以获取奇成功或失败的结果 解决回调地狱问题 Promise构
  • 第一个java程序helloworld代码的编写

    第一个java程序helloworld代码的编写 文章目录 第一个java程序helloworld代码的编写 toc 一 项目 二 认识JVM JRE和JDK 2 1 JVM是什么 2 2 JVM的主要功能和作用 2 3 JRE和JDK J
  • linux如何kill僵尸进程,linux 如何杀死僵尸进程——原理及操作

    linux 如何杀死僵尸进程 Posted on 2011 年 9 月 20 日 by Open Source In UNIX System terminology a process that has terminated but who
  • 炫酷翻页时钟FlipClock的使用和样式自定义

    前言 基于 kuan vue flip clock 插件 由于插件的样式比较固定 所以想要改变其样式需要自定义 这里我是在PC端 vue2 x 样式表sass 样式vw rem自适应 插件文档 https www npmjs com pac
  • 利用RepVGG训练一个cifar-10数据

    文章目录 1 训练整体代码 1 1 repvgg代码 1 2 cifar 10数据 2 学习率更新策略 3 RepVGG原理详解 4 权重convert过程 4 1 推理步骤 4 2 权重转换的步骤 5 导出onnx 5 1 模型转换前的o
  • Linux系统下,永久修改海思开发板的IP地址

    问题描述 给开发板需要重新设置下IP地址 并永久生效 解决步骤 先看下开发板当前的IP 使用命令 ifconfig 3519AV100 ifconfig eth0 Link encap Ethernet HWaddr 9A BC 07 72
  • Linux安装jenkins

    本文基于阿里云租的服务器 centos8版本下安装jenkins 1 安装jenkins 首先先登录jenkins官网去下载对应的包 地址 Jenkins 在上图中选择版本下载即可 下载完上传到你的linux中 如下图所示 至于存放的地址没
  • Vue3.0 + Ts 项目使用element-plus 自动按需导入 使用v-loading报错

    问题展示 使用v loading报错 无法找到样式 element plus es components loading directive style css 解决办法 element plus版本 element plus 2 1 9
  • 【SpinalHDL】verilatorScript.sh: line 1: verilator_bin.exe: command not found

    问题 verilatorScript sh line 1 verilator bin exe command not found 解决 使用msys2安装iverilator后将安装路径下的 mingw64 bin添加到系统环境变量PATH
  • 为什么jmeter做压测叫做“并发”而不叫“并行”?

    昨天开测试方案评审会议 其中有一条性能测试需求为 测试100个用户同时进行查询 响应时间小于2s 方案中给出了100个用户并发操作的说明 关于 并发 二字 百思不得其解 首先 挖出脑袋里大学操作系统课堂上提到的概念 并发 在操作系统中 是指
  • Struts2常用的Ajax标签

    Struts2为了简化Ajax过程 提供了一些常用的Ajax标签 对于一些更复杂的Ajax通信过程 我们可以使用JSON插件来实现 1 div标签 div标签在页面上生成一个div元素 但这个div元素的内容不是静态内容 而是从服务器获取的
  • C#冒泡排序算法

    冒泡排序实现原理 冒泡排序是一种简单的排序算法 其原理如下 从待排序的数组的第一个元素开始 依次比较相邻的两个元素 如果前面的元素大于后面的元素 升序排序 则交换这两个元素的位置 使较大的元素 冒泡 到右侧 继续比较下一对相邻元素 重复步骤