多维数组c#数字排序



我需要帮助按升序排序多维数组。

因此,如果输入是:

2 5 6 1 4
5 9 2 1 3
7 4 2 4 5
9 2 5 8 5

我需要输出:

1 1 2 2 2
2 3 4 4 4
5 5 5 5 5
6 7 8 9 9

这是我的迷你版应用程序,我卡住了,甚至不知道如何搜索,我不知道如何推送它,所以我希望寻求帮助。

这是我的代码:


static void Main(string[] args)
{
int row = 4;
int column = 5;
int[,] mas = new int[row, column];
InitMas(mas);
PrintMas(mas);
}
static void InitMas(int[,] arr)
{
Random rn = new Random();
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
arr[i, j] = rn.Next(10, 100);
}
}
}
static void PrintMas(int[,] arr)
{
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
Console.Write(arr[i, j] + " | ");
}
Console.WriteLine();
}
}

您可以展平您的数组,对一维数组进行排序,然后将其重新设置为二维数组。但实际上,二维数组作为一维数组存储在内存中,编译器根据行和列计算一维索引。因此,这种先到一维再回到二维的转换是不必要的。如果使用指针,则可以以一维方式直接访问二维数组。尽管unsafe代码(指针所必需的(在C#中并不常见,而且在没有充分理由的情况下不应该使用它,但您可以在这里获得一些性能。

这个例子只使用了冒泡排序,但它展示了这个想法:

public static unsafe void Sort(int[,] input)
{
fixed(int* pointer = &input[0,0])
{
for(int i = 0; i < input.Length; i++)
{
for(int j = 0; j < input.Length - 1; j++)
{
if(*(pointer + j) > *(pointer + j + 1))
{
int temp = *(pointer + j + 1);
*(pointer + j + 1) = *(pointer + j);
*(pointer + j) = temp;
}
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新