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

冒泡排序(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 不会超出数组的范围。

相关推荐
sp4210 分钟前
白话 LRU 缓存及链表的数据结构讲解(一)
算法
_不会dp不改名_1 小时前
leetcode_42 接雨水
算法·leetcode·职场和发展
Swaggy T1 小时前
自动驾驶轨迹规划算法——Apollo EM Planner
人工智能·算法·自动驾驶
野生的编程萌新2 小时前
从冒泡到快速排序:探索经典排序算法的奥秘(二)
c语言·开发语言·数据结构·c++·算法·排序算法
iLoyalty2 小时前
防御保护15
算法·哈希算法
weixin_307779132 小时前
VS Code配置MinGW64编译backward库
开发语言·c++·vscode·算法
花开富贵ii3 小时前
代码随想录算法训练营四十三天|图论part01
java·数据结构·算法·深度优先·图论
weixin_307779134 小时前
AWS Lambda解压缩S3 ZIP文件流程
python·算法·云计算·aws
code小毛孩5 小时前
leetcode hot100数组:缺失的第一个正数
数据结构·算法·leetcode
legendary_bruce11 小时前
【22-决策树】
算法·决策树·机器学习