请编程实现一个冒泡排序算法?

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

以下是使用C#实现的冒泡排序算法:

注意:需要理解引用类型的概念,会更清楚的理解下面代码

cs 复制代码
using System;

public class BubbleSort
{
    public static void BubbleSortAlgorithm(int[] array)
    {
        int n = array.Length;
        for (int i = 0; i < n - 1; i++)
        {
            for (int j = 0; j < n - i - 1; j++)
            {
                if (array[j] > array[j + 1])
                {
                    // 交换 array[j] 和 array[j + 1]
                    int temp = array[j];
                    array[j] = array[j + 1];//这里其实就是用到引用类型概念,把arry[j+1]位置下存放的值放到array[j]位置下
                    array[j + 1] = temp;
                }
            }
        }
    }

    public static void Main()
    {
        int[] array = { 64, 34, 25, 12, 22, 11, 90 };
        Console.WriteLine("Original array:");
        foreach (var item in array)
        {
            Console.Write(item + " ");
        }

        BubbleSortAlgorithm(array);

        Console.WriteLine("\nSorted array:");
        foreach (var item in array)
        {
            Console.Write(item + " ");
        }
    }
}

让我们逐步分析这段代码:

  1. int temp = array[j];
    • 这行代码创建了一个名为 temp 的整型变量,并将其初始化为 array[j] 的值。这意味着 temp 现在存储了索引为 j 的元素的值。
  2. array[j] = array[j + 1];
    • 接下来,这行代码将索引为 j + 1 的元素的值赋给索引为 j 的元素。此时,索引为 j 的元素的值被更新为原来索引为 j + 1 的元素的值,但索引为 j + 1 的元素的值仍然保留在内存中(尽管我们暂时不能直接访问它,因为它现在被 temp 变量保存了)。
  3. array[j + 1] = temp;
    • 最后,这行代码将 temp 变量的值(即原来索引为 j 的元素的值)赋给索引为 j + 1 的元素。这样,索引为 jj + 1 的元素就完成了交换。

这种交换元素的方法是数组操作中非常基本且常用的技术。它允许你在不增加额外数组空间的情况下,重新排列数组中的元素。然而,需要注意的是,如果 j 是数组的最后一个元素的索引(即 j 等于数组长度减一),那么 array[j + 1] 将是越界访问,因为数组的索引是从0开始的,并且最大索引是数组长度减一。因此,在使用这段代码时,需要确保 j + 1 不会超出数组的范围。

相关推荐
鹿角片ljp4 分钟前
从 Kimi Cyber Reasoning 学习网络安全推理数据集:从 Reasoning SFT 到安全 Agent 数据设计
数据结构·算法
residual_fan1 小时前
航空发动机故障诊断专用智能体(三):基于对比学习的时序特征区分方法
人工智能·算法·数据挖掘·数据分析
Logic1011 小时前
C语言/数据结构位运算题解:异或XOR找出数据表中的“独特编号“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
高亦真1 小时前
今天是学习嵌入式的第39天
linux·学习·算法
Omics Pro2 小时前
AI药物研发10原则!欧盟EMA×美国FDA
数据库·人工智能·算法·机器学习·自然语言处理
wabs6662 小时前
关于二叉树【力扣100.相同的树的思考】
数据结构·c++·算法·leetcode·二叉树·递归法
知知之之2 小时前
敏感数据查询:SHA-256 还是 HMAC-SHA256
算法
彧azz2 小时前
Java学习记录:判断语句
java·笔记·学习·算法
alphaTao2 小时前
LeetCode 每日一题 2026/9/14-2026/9/20
算法·leetcode
hanlin032 小时前
刷题笔记:力扣第560题-和为k的子数组
笔记·算法·leetcode