关于冒泡算法

news2024/11/16 1:48:45

一、前言

        当谈及经典排序算法时,冒泡排序(Bubble Sort)无疑是最具代表性的一种。这种算法以其简单直观的特点,成为初学者理解排序基本概念的理想选择。本文将深入解析冒泡排序的原理、实现步骤,以及其在 C# 编程中的具体实现方式。


二、冒泡排序的简介

        冒泡排序是一种基础的比较排序算法。它通过反复遍历待排序的列表,逐对比较相邻元素。如果它们的顺序不正确,便交换它们的位置。这一过程持续进行,直到没有元素需要再交换,从而实现排序。

三、介绍下工作原理

冒泡排序的工作过程如下:

1. 初始状态:

  • 从列表的第一个元素开始。

2. 比较和交换:

  • 比较相邻的两个元素(例如,元素 A 和元素 B)。
  • 如果 A > B,则交换这两个元素的位置。
  • 继续向右移动,比较下一个相邻的元素对(B 和 C),并进行相同的比较与交换。

3. 遍历一轮:

  •  重复上面的比较与交换过程,直到遍历整个列表。此时,最大的元素会“冒泡”到列表的末尾。

4. 重复过程:

  • 对剩余的未排序部分重复以上步骤。
  • 每完成一轮,已排序的部分会越来越大,未排序的部分会逐渐减小。

5. 终止条件:

  • 当某次遍历没有发生任何交换,说明列表已完全排序,此时算法结束。

通过上述步骤,冒泡排序逐步将元素调整至正确的顺序,直至完成排序。

        现在,让我们通过 C# 代码实现冒泡排序算法:

using System;  

class Program  
{  
    static void Main()  
    {  
        int[] arr = { 59, 31, 28, 8, 23, 10, 98 };  
        Console.WriteLine("原始数组:");  
        PrintArrayVal(arr);  
        
        BubbleSort(arr);  
        
        Console.WriteLine("排序后的数组:");  
        PrintArrayVal(arr);  
    }  

    static void BubbleSort(int[] arr)  
    {  
        int n = arr.Length;  
        bool swapped;  

        for (int i = 0; i < n - 1; i++)  
        {  
            swapped = false;  

            // 遍历未排序的部分  
            for (int j = 0; j < n - 1 - i; j++)  
            {  
                // 如果当前元素大于下一个元素,则交换  
                if (arr[j] > arr[j + 1])  
                {  
                    Swap(ref arr[j], ref arr[j + 1]);  
                    swapped = true;  
                }  
            }  

            // 如果没有发生交换,说明数组已排序,提前退出  
            if (!swapped)  
                break;  
        }  
    }  

    static void Swap(ref int a, ref int b)  
    {  
        int temp = a;  
        a = b;  
        b = temp;  
    }  

    static void PrintArrayVal(int[] arr)  
    {  
        foreach (var item in arr)  
        {  
            Console.Write(item + " ");  
        }  
        Console.WriteLine();  
    }  
}

说明:

  1. BubbleSort 方法:实现冒泡排序的核心逻辑。
  2. Swap 方法:用于交换两个元素的值。
  3. PrintArray 方法:用于打印数组内容,便于观察排序过程。

        运行这段代码后,控制台将输出原始数组和排序后的数组。

四、结论

        这篇文章详细介绍了冒泡排序算法的工作原理以及在 C# 中的实现方法。尽管冒泡排序算法相对简单,但它在处理小型数据集时依然有效。其核心思想是不断比较相邻的元素并根据需要进行交换,直至整个列表排序完成。通过这一过程,您不仅可以更好地理解冒泡排序的运作机制,还能掌握其在实际编程中的应用和实现细节。希望这篇文章能够帮助您深化对冒泡排序算法的认识!

更多学习内容,可关注公众号:CAD软件二次开发

 以上内容为个人测试过程的记录,供大家参考。

内容如有错欢迎批评指正,谢谢!!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue】RuoYi-Vue 若依 vue3 版本安装 tailwindcss 不生效问题

解决方法 删除默认安装教程下的 postcss.config.js 将配置转移到 vite.config.js 中&#xff0c;不生效原因我推测是因为 vite.config.js 配置 postcss 这段覆盖了 postcss.config.js 所致 代码修改如下&#xff1a; 另外原博主友情提示&#xff0c;引入的TailwindCSS的样式…

已解决AttributeError: module ‘emoji‘ has no attribute ‘get_emoji_regexp‘

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

遥感技术在生态系统碳储量、碳收支、碳循环以及人为源排放反演等领域的技术发展

卫星遥感具有客观、连续、稳定、大范围、重复观测的优点&#xff0c;已成为监测全球碳盘查不可或缺的技术手段&#xff0c;卫星遥感也正在成为新一代 、国际认可的全球碳核查方法。目的就是梳理碳中和与碳达峰对卫星遥感的现实需求&#xff0c;系统总结遥感技术在生态系统碳储量…

synchronized 与 Lock 的区别

synchronized 与 Lock 的区别 1、相同点2、不同点2.1 精确性与灵活性2.2 性能2.3 使用便利性 3、示例3.1 synchronized 示例3.2 Lock 示例 4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java多线程编程中&#xff0c;synchroniz…

查找并可视化非线性关系

使用部分依赖图 (PDP)、互信息和特征重要性分析非线性关系 刚开始开车时&#xff0c;你的经验较少&#xff0c;有时还会比较鲁莽。随着年龄的增长&#xff0c;你会获得更多的经验&#xff08;和意识&#xff09;&#xff0c;发生事故的可能性也会降低。然而&#xff0c;这种趋势…

Java语言程序设计基础篇_编程练习题*16.6 (演示TextField的属性)

目录 题目&#xff1a;*16.6 (演示TextField的属性) 习题思路 代码示例 结果展示 题目&#xff1a;*16.6 (演示TextField的属性) 编写一个程序&#xff0c;动态地设置文本域的水平对齐属性和列宽属性&#xff0c;如图16-38a所示 习题思路 创建一个HBox&#xff0c;一个Labe…

【前端】记录各种控制台警告/bug

一、Element Plus 1、控制台警告&#xff1a;“Runtime directive used on component with non-element root node. The directives will not function as intended.” 错误原因&#xff1a;在 Vue 组件上使用了运行时指令&#xff08;指那些在运行时动态绑定到 DOM 元素上的指…

bilibili实习生一面0625

OSI七层模型 物理层&#xff1a;将帧中的比特传送到下一个节点&#xff08;比特&#xff09; 数据链路层&#xff1a;将数据包装成帧并传送到路径上下一个节点&#xff0c;将相邻节点间不可靠的物理链路变成可靠的逻辑链路&#xff08;帧&#xff09; 网络层&#xff1a;路由寻…

信创数据库沙龙(深圳站 | 开启报名)

信创数据库沙龙: 是一个致力于推动数据库技术创新和发展的高端交流平台&#xff0c;旨在增强国内数据库产业的自主可控性和高质量发展。这个平台汇集了学术界和产业界的顶尖专家、学者以及技术爱好者&#xff0c;通过专题演讲、案例分享和技术研讨等丰富多样的活动形式&#x…

Tkinter Canvas 如何在顶部绘制文本?

在 Tkinter 的 Canvas 上绘制文本非常简单&#xff0c;我们可以使用 create_text 方法来完成这个任务。create_text 方法允许我们指定文本的位置、内容以及字体等属性。为了确保文本绘制在顶部&#xff0c;我们可以设置 y 坐标接近 Canvas 的顶部。 1、问题背景 在使用 Tkinte…

响应式高端大气的模板源码图库素材资源下载平台网站源码,无加密无后门

好看的响应式高端网站模板源码图库素材 资源下载平台源码&#xff08;可运营&#xff09;可用于做资源网&#xff0c;功能非常的齐全无任何加密也无任何后门&#xff01;响应式高端网站模板源码图库素材 资源下载平台源码。这个是独立的网站源码&#xff0c;不依赖wordpress等第…

本地部署Perplexity 克隆:使用Llama 3.1实现高效搜索

最近&#xff0c;OpenAI宣布推出Search GPT&#xff0c;这基本上是Perplexity的改版&#xff0c;但直接由OpenAI开发。这让我非常高兴&#xff0c;因为与其让第三方使用他们的模型并提供封装服务&#xff0c;不如他们自己来做。我一直不喜欢Perplexity&#xff0c;因为他们声称…

【C++ | 泛型编程】C++函数模板详解(定义、使用、特化、重载)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

Stable Diffusion绘画 | 图生图-局部重绘(三)

重绘区域 整张图片 指重绘的分辨率是应用在整个画面上的&#xff0c;会整个画面综合参与运算。 选择一片空白区域&#xff0c;提示词添加 a book&#xff1a; 操作生成图片&#xff1a; SD会觉得整个画面中&#xff0c;蒙版区域出现一本书不太合理&#xff0c;索性生成一张木…

【多模态】43、INF-LLAVA | 使用双视角裁剪和双视角增强模块来提升模型对大分辨率图片的处理能力

论文&#xff1a;INF-LLaVA: Dual-perspective Perception for High-Resolution Multimodal 代码&#xff1a;https://github.com/WeihuangLin/INF-LLaVA 出处&#xff1a;厦大 时间&#xff1a;2024.07.23 贡献&#xff1a; 提出了双视角裁剪模块&#xff08;Dual-perspe…

【后续 断点续传】前端大文件分片下载解决方案,没用你来砍我

前言 之前已经出过 大文件分片下载 的教程&#xff0c;期间也收到很多小伙伴的疑问说是功能上有点问题&#xff0c;也抽时间将一些大的问题修改了&#xff0c;验证了很多次&#xff0c;应该不会有什么问题了&#xff1b;在下载方案中涉及到断点续传部分的没有细讲&#xff0c;…

【MySQL】索引和事务

秋招 秋招中最经典&#xff0c;最高频的面试题 文章目录 索引 index操作索引的 SQL查看索引创建索引删除索引 事务操作四个核心特性 索引 index 在数据库中建立一个特殊的“目录“&#xff08;一系列特定的数据结构&#xff09;&#xff0c;为了加快查询速度 select 查询都是遍…

Go项目依赖:Tidy命令与离线依赖获取

引言 Go语言以其简洁性和高效性在开发者中广受欢迎&#xff0c;而Go的模块系统则为依赖管理提供了极大的便利。本文将介绍如何使用go mod tidy命令来整理项目的依赖关系&#xff0c;以及在无法在线获取依赖的情况下&#xff0c;如何通过离线方式获取并使用依赖。 使用go mod …

数论基础知识(下)

目录 欧拉函数 n的分解质因数求欧拉函数 试除法求欧拉函数值 积性函数 筛法 朴素筛 埃氏筛 欧拉筛 (线性筛) 线性筛欧拉函数 快速幂 同余 欧拉定理 费马小定理 乘法逆元 欧拉函数 互质 : ∀ a , b ∈ N &#xff0c;若 gcd ( a , b ) 1 &#xff0c;则 a…

Java零基础之多线程篇:线程控制

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…