数组进阶#
本篇覆盖冒泡排序与二维数组两个进阶主题。基础声明与操作见 数组基础。
冒泡排序#
从小到大排序#
冒泡排序的核心思想:每一轮把相邻的两个元素比较,如果顺序不对就交换,最大的数像气泡一样"浮"到末尾。
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]}");
}
}
相关笔记#
- 数组基础 — 数组声明、初始化、遍历
- 循环嵌套 — 双层循环(二维数组遍历基础)
- 循环专项练习 — 循环与数组综合练习
- 委托与 Lambda — Array.Sort / Array.Reverse 等数组方法