跳转至

数组进阶#

本篇覆盖冒泡排序二维数组两个进阶主题。基础声明与操作见 数组基础

冒泡排序#

从小到大排序#

冒泡排序的核心思想:每一轮把相邻的两个元素比较,如果顺序不对就交换,最大的数像气泡一样"浮"到末尾

int[] arr = { 3, 4, 1, 6, 7, 10, 23, 45 };
for (int i = 0; i < arr.Length; i++)
{
    for (int j = 0; j < arr.Length - 1 - i; j++)
    // arr.Length - 1 - i:减少对已经排好的位置再次比较,减少内存消耗
    {
        if (arr[j] > arr[j + 1])
        {
            // 元组交换:数组数据换位置
            (arr[j], arr[j + 1]) = (arr[j + 1], arr[j]);
        }
    }
}

从大到小排序#

int[] arr = { 3, 4, 1, 6, 7, 10, 23, 45 };
for (int i = 0; i < arr.Length; i++)
{
    for (int j = arr.Length - 1; j > i; j--)
    {
        if (arr[j] > arr[j - 1])
        {
            (arr[j - 1], arr[j]) = (arr[j], arr[j - 1]);  // 数组数据换位置
        }
    }
}

优化技巧arr.Length - 1 - i 可以省略对已排好位置的重复比较,减少内存消耗。

二维数组#

声明与初始化#

// 创建二维数组:new int[行数, 列数]
int[,] ints01 = new int[5, 5]
{
    {1, 2, 3, 4, 12},
    {5, 6, 7, 8, 13},
    {9, 10, 11, 12, 14},
    {123, 34, 123, 234, 123},
    {123, 34, 123, 234, 123},
};

遍历二维数组#

使用 GetLength(0) 获取行数,GetLength(1) 获取列数:

for (int i = 0; i < ints01.GetLength(0); i++)      // 行
{
    for (int j = 0; j < ints01.GetLength(1); j++)  // 列
    {
        Console.WriteLine($"第{i + 1}行,第{j + 1}列:{ints01[i, j]}");
    }
}

相关笔记#