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

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

相关推荐
kyle~1 小时前
排序---插入排序(Insertion Sort)
c语言·数据结构·c++·算法·排序算法
Boop_wu1 小时前
[数据结构] 队列 (Queue)
java·jvm·算法
hn小菜鸡2 小时前
LeetCode 3643.垂直翻转子矩阵
算法·leetcode·矩阵
2301_770373732 小时前
数据结构之跳表
数据结构
散1122 小时前
01数据结构-初探动态规划
数据结构·动态规划
ゞ 正在缓冲99%…3 小时前
leetcode101.对称二叉树
算法
YuTaoShao3 小时前
【LeetCode 每日一题】3000. 对角线最长的矩形的面积
算法·leetcode·职场和发展
2zcode3 小时前
基于Matlab可见光通信系统中OOK调制的误码率性能建模与分析
算法·matlab·php
纵有疾風起4 小时前
数据结构中的排序秘籍:从基础到进阶的全面解析
c语言·数据结构·算法·排序算法
纪元A梦4 小时前
贪心算法应用:推荐冷启动问题详解
算法·贪心算法