冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
以下是使用C#实现的冒泡排序算法:
注意:需要理解引用类型的概念,会更清楚的理解下面代码
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 + " ");
}
}
}
让我们逐步分析这段代码:
int temp = array[j];
- 这行代码创建了一个名为
temp
的整型变量,并将其初始化为array[j]
的值。这意味着temp
现在存储了索引为j
的元素的值。
- 这行代码创建了一个名为
array[j] = array[j + 1];
- 接下来,这行代码将索引为
j + 1
的元素的值赋给索引为j
的元素。此时,索引为j
的元素的值被更新为原来索引为j + 1
的元素的值,但索引为j + 1
的元素的值仍然保留在内存中(尽管我们暂时不能直接访问它,因为它现在被temp
变量保存了)。
- 接下来,这行代码将索引为
array[j + 1] = temp;
- 最后,这行代码将
temp
变量的值(即原来索引为j
的元素的值)赋给索引为j + 1
的元素。这样,索引为j
和j + 1
的元素就完成了交换。
- 最后,这行代码将
这种交换元素的方法是数组操作中非常基本且常用的技术。它允许你在不增加额外数组空间的情况下,重新排列数组中的元素。然而,需要注意的是,如果 j
是数组的最后一个元素的索引(即 j
等于数组长度减一),那么 array[j + 1]
将是越界访问,因为数组的索引是从0开始的,并且最大索引是数组长度减一。因此,在使用这段代码时,需要确保 j + 1
不会超出数组的范围。