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

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

相关推荐
8Qi83 分钟前
LeetCode 337:打家劫舍 III(House Robber III)—— 题解 ✅
算法·leetcode·二叉树·动态规划
地平线开发者3 分钟前
从 INT64 Div 算子约束到 Cast 修复全流程
算法
AI科技星6 分钟前
基于奇合数边界的离散解析数论与双螺旋宇宙本体大统一体系论文全部数学公式汇总表
人工智能·算法·机器学习·架构·学习方法
糖果店的幽灵10 分钟前
Pandas DataFrame 数据结构详解
数据结构·pandas
地平线开发者18 分钟前
Horizon 模型多 Batch 配置
算法·自动驾驶
czhaii30 分钟前
GB2312简体中文编码表
单片机·算法
8Qi839 分钟前
LeetCode 121 & 122:股票买卖问题(DP 对比题解)✅
算法·leetcode·职场和发展·动态规划
一只齐刘海的猫1 小时前
【Leetcode】 接雨水
java·算法·leetcode
南境十里·墨染春水1 小时前
讲讲移动语义
算法
西凉的悲伤1 小时前
Guava类库——Range连续区间
java·算法·guava