从零开始学习 C#,没有任何编程经验。已到达数组(提前 - 方法)。通过按类型轻松排序,弄清楚如何对常规数组(一维、二维、三维等)进行排序和反转
temp = nums[i][j];
nums[i][j] = nums[k][m];
nums[k][m] = temp;
但是我无法理解如何通过类似的构造来反转数组数组:((
我知道我正在重新发明轮子,但我想利用目前可用的知识来做这件事,并在几个月后回到这个任务并正常做。
一些特定的数组数组,如
int[][] nums = new int[3][];
nums[0] = new int[1];
nums[1] = new int[2];
nums[2] = new int[3];
事实证明,通过拐杖可以完成,但这是一种一次性解决方案,如果您更改数组元素的数量,它就不起作用。
数组数组的降序和升序排序没有问题,一切都不需要拐杖,堵嘴只有反向。
这是一个反转二维数组的示例(不笑,只是我尝试这样做的一个示例)
Random random = new Random();
int[,] numbers = new int[random.Next(2,10), random.Next(2, 10)];
for (int i = 0; i < numbers.GetLength(0); i++)
{
for (int j = 0; j < numbers.GetLength(1); j++)
{
numbers[i, j] = random.Next(-100, 100);
}
}
Console.WriteLine($"2D array is: {numbers.GetLength(0)}, {numbers.GetLength(1)}");
Console.WriteLine();
Console.WriteLine("Original array is: ");
for (int i = 0; i < numbers.GetLength(0); i++)
{
for (int j = 0; j < numbers.GetLength(1); j++)
{
Console.Write($"{numbers[i, j]}\t");
}
Console.WriteLine();
}
Console.WriteLine();
int temp = 0;
int i_mid = numbers.GetLength(0) / 2;
int j_mid = numbers.GetLength(1) / 2;
for (int i = 0; i < numbers.GetLength(0); i++)
{
for (int j = 0; j < j_mid; j++)
{
temp = numbers[i, j];
numbers[i, j] = numbers[numbers.GetLength(0) - (i + 1), numbers.GetLength(1) - (j + 1)];
numbers[numbers.GetLength(0) - (i + 1), numbers.GetLength(1) - (j + 1)] = temp;
}
if (remainder > 0 && i < i_mid)
{
temp = numbers[i, j_mid];
numbers[i, j_mid] = numbers[numbers.GetLength(0) - (i + 1), j_mid];
numbers[numbers.GetLength(0) - (i + 1), j_mid] = temp;
}
}
Console.WriteLine("Reversed array is: ");
for (int i = 0; i < numbers.GetLength(0); i++)
{
for (int j = 0; j < numbers.GetLength(1); j++)
{
Console.Write($"{numbers[i, j]}\t");
}
Console.WriteLine();
}
Console.WriteLine();
并对数组数组进行排序
Random random = new Random();
int temp = 0;
int[][] nums = new int[3][];
nums[0] = new int[1];
nums[1] = new int[2];
nums[2] = new int[3];
Console.WriteLine("Original array is: ");
for (int i = 0; i < nums.Length; i++)
{
for (int j = 0; j < nums[i].Length; j++)
{
nums[i][j] = random.Next(100);
}
}
for (int i = 0; i < nums.Length; i++)
{
for (int j = 0; j < nums[i].Length; j++)
{
Console.Write($"{nums[i][j]}\t");
}
Console.WriteLine();
}
for (int i = 0; i < nums.Length; i++)
{
for (int j = 0; j < nums[i].Length; j++)
{
for (int k = 0; k < nums.Length; k++)
{
for (int m = 0; m < nums[k].Length; m++)
{
if(nums[i][j] > nums[k][m])
{
temp = nums[i][j];
nums[i][j] = nums[k][m];
nums[k][m] = temp;
}
}
}
}
}
Console.WriteLine();
Console.WriteLine("Descending sorted array is: ");
for (int i = 0; i < nums.Length; i++)
{
for (int j = 0; j < nums[i].Length; j++)
{
Console.Write($"{nums[i][j]}\t");
}
Console.WriteLine();
}
反过来,我们首先为一维数组编写算法。
首先,我们需要一个交换两个元素的函数
然后是一维数组的通常反向代码,从两端开始交换元素
让我们反转数组来检查
输出
嗯,你可以看到数组数组是同一个一维数组,没有区别。因此,您可以重用代码并首先反转每个嵌套数组,然后是数组本身(尽管顺序在这里并不重要)
输出是可预测的