C# 排序算法之冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

下面是冒泡排序的C#实现:

csharp 复制代码
using System;  
  
class Program  
{  
    static void Main(string[] args)  
    {  
        // 定义一个整型数组arr
        int[] arr = { 64, 34, 25, 12, 22, 11, 90 };  
        // 调用BubbleSort方法对数组arr进行排序  
        BubbleSort(arr);  
        Console.WriteLine("排序结果: ");  
        // 调用PrintArray方法打印排序后的数组  
        PrintArray(arr);  
    }  
  
    // 定义一个静态方法BubbleSort,用于对整型数组进行冒泡排序  
    static void BubbleSort(int[] arr)  
    {  
        // 获取数组的长度  
        int n = arr.Length;  
        // 外层循环控制排序的总轮数  
        for (int i = 0; i < n - 1; i++)  
        {  
            // 内层循环负责在每一轮中进行实际的元素比较和交换  
            for (int j = 0; j < n - 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;  
                }  
            }  
        }  
    }  
  
    // 定义一个静态方法PrintArray,用于打印整型数组的内容  
    static void PrintArray(int[] arr)  
    {  
        foreach (int i in arr)  
        {  
            Console.Write(i + " ");  
        }  
        Console.WriteLine();  
    }  
}

在这个实现中,BubbleSort 方法接受一个整型数组 arr 作为参数,并对其进行原地排序。它使用了两层嵌套的循环:外层循环控制排序的总轮数,内层循环负责在每一轮中进行实际的元素比较和交换。内层循环每完成一轮,就能确保数组中的最大元素被"冒泡"到它应该在的位置(即数组的末尾)。因此,随着外层循环的进行,需要排序的元素数量逐渐减少,直到整个数组排序完成。

PrintArray 方法用于打印排序后的数组,以便于验证排序结果。

需要注意的是,冒泡排序的时间复杂度为O(n^2),在数据量较大时效率较低,因此它并不适用于需要高效排序的场合。

相关推荐
船厂电气自动化ai大模型34 分钟前
AI大模型与数学/第63课:矩阵定义、矩阵加法、标量乘法(逐级精讲)
数据结构·人工智能·深度学习·线性代数·算法
余额瞒着我当琳1 小时前
算法修炼 chapter 2 双指针进阶、盛最多水的容器、有效三角形的个数、两数之和、三数之和、四数之和
算法
你压到我腿毛了6661 小时前
C语言冒泡算法(Bubble sort)
c语言·数据结构·算法
靠沿2 小时前
贪心算法专题(三)
算法·贪心算法
yue0082 小时前
winform控件篇-按钮
c#
super大力张2 小时前
MOE基于结构的药物设计(七):Ligand R-Vectors——如何判断配体可以从哪里继续生长?
数据库·算法·cadd·moe·svl·基于结构的药物设计
Tongsr3 小时前
别只混淆代码:用 Kaleido 加固整个 Android Release AAB
前端·算法·github
高亦真3 小时前
今天是学习嵌入式的第34天
linux·学习·算法
飞Link4 小时前
动作方法中的分割与过度分割方法全解析(含代码实战与踩坑案例)
人工智能·python·算法·计算机视觉
张宇Joaquin5 小时前
鲲鹏统一并行加速库KUPL--异步数据拷贝
线性代数·算法·矩阵·numpy