首页 > 编程语言 >C#冒泡排序算法

C#冒泡排序算法

时间:2023-07-30 22:33:15浏览次数:37  
标签:arr C# 元素 冒泡排序 arrLength int 算法 排序

冒泡排序实现原理

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

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

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

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

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

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

冒泡排序图解

冒泡排序实现的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

加入DotNetGuide技术交流群

在DotNetGuide技术交流群中可以结识更多志同道合的开发者,甚至可能与其他开发者合作完成有趣的项目。通过这个群组,我们希望能够搭建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值。

欢迎加入DotNetGuide技术交流群

标签:arr,C#,元素,冒泡排序,arrLength,int,算法,排序
From: https://www.cnblogs.com/Can-daydayup/p/17592218.html

相关文章

  • Python报错 | ImportError: To be able to use evaluate-metric/seqeval, you need to
    报错信息使用metric=evaluate.load("seqeval")的时候,报如下错误:ImportError:Tobeabletouseevaluate-metric/seqeval,youneedtoinstallthefollowingdependencies['seqeval']using'pipinstallseqeval'forinstance'错误原因这个错误提示表......
  • RS485或RS232转ETHERCAT连接ethercat总线伺服如何控制
    最近,生产管理设备中经常会遇到两种协议不相同的情况,这严重阻碍了设备之间的通讯,串口设备的数据不能直接传输给ETHERCAT。这可怎么办呢?别担心,捷米JM-ECT-RS485/232来了!这是一款自主研发的ETHERCAT从站功能的通讯网关,主要功能是将ETHERCAT网络和RS485或RS232设备连接起来。它连接......
  • [SWPUCTF 2021 新生赛]no_wakeup
    [SWPUCTF2021新生赛]no_wakeup题目来源:nssctf题目类型:web涉及考点:PHP反序列化1.题目给了一个点击按钮,点进去看看:进去后就是代码审计了:<?phpheader("Content-type:text/html;charset=utf-8");error_reporting(0);show_source("class.php");classHaHaHa{p......
  • IJCAI 2023 | 腾讯优图实验室入选论文解读,含小样本学习方法、玻璃物体分割、RSI变化检
    前言 近日,IJCAI2023(InternationalJointConferenceonArtificialIntelligence)国际人工智能联合大会公布了录用结果。本届会议共有4566篇投稿,接收率为15%。作为当前全球最负盛名的AI学术会议之一,IJCAI将于今年8月在澳门举行。本文转载自腾讯优图仅用于学术分享,若侵权请联......
  • 【解惑】介绍.net中的DataTable的AcceptChanges方法
    DataTable.AcceptChanges方法是一个用于DataTable对象的方法,它将所有对DataTable进行的更改标记为已接受。这意味着所有新增、修改和删除的行都将被标记为DataRowState.Unchanged,并且DataTable对象的HasChanges属性将返回false。需要强调的是,AcceptChanges方法只是将更改标记为已......
  • 某行动态cookie反爬虫分析
    某行动态cookie反爬虫分析1.预览反爬网址(base64):aHR0cDovL3d3dy5wYmMuZ292LmNu反爬截图:需要先加载运行js代码,可能是对环境进行检测,反调试之类的无限debugger处理办法网上大部分人说的都是添加cookie来解决。那个noscript标签仅仅是用于提示用户的,在......
  • croe5.0学习笔记(5)建模技巧
    1.建模技巧1.1指定曲面偏移1.2  ......
  • 我的第六次C语言练习
    //复习//intA(intx,inty);//intB(intx,inty);//intmain(void)//{// inta,b,c,d,f;// a=0;// b=0;// scanf("%d%d",&a,&b);// c=A(a,b);// d=A(b,c);// f=B(c,d)+a*B(a,c);// printf("end=%d\n",f)......
  • BUUCTF Findkey
     对题目分析:if(Msg==517){if(strlen(String1)>6)//String位数小于等于6ExitProcess(0);if(strlen(String1)){memset(v17,0,sizeof(v17));v6=strlen(String1);memcpy(v17,......
  • 【ACM专项练习#01】基本输入输出,如何加减
    关于ACM,牛客其实也有专门的模拟练习:https://ac.nowcoder.com/acm/contest/5657#question做这个也可以关于while(cin>>n)在处理输入时,cin>>n;while(n--)和while(cin>>n)是两种常见方法这里说一下区别cin>>n;while(n--)当你预先知道迭代次数,并希望根据该次数执......