【问题标题】:Multidimensional array c# number sort [closed]多维数组c#数字排序[关闭]
【发布时间】:2021-09-27 01:33:39
【问题描述】:

我需要帮助以升序对多维数组进行排序。

所以如果输入是:

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();
            }

        }

【问题讨论】:

  • 我可以看到你的任务,但我找不到你尝试了什么?你忘了添加它吗?或者有什么问题?我们不是解决方案提供商。
  • 我没有添加它,因为我删除了那部分,我来这里希望我得到帮助。
  • 把你的 2dim 数组变成 1dim 数组,排序,再变成 2d。
  • 如果您希望我们能够帮助您需要发布您的尝试,现在-> stackoverflow.com/questions/8866414/…
  • 我们通过告诉您您做错了什么来帮助您,以便您可以更改它并解决您的问题。如果您没有做任何事情,我们无法告诉您您做错了什么。

标签: c# arrays sorting multidimensional-array


【解决方案1】:

您可以展平您的数组,对一维数组进行排序,然后再次使其成为二维数组。但实际上,您的二维数组作为一维数组存储在内存中,编译器从行和列计算一维索引。因此,不需要先转换为一维,然后再转换为二维。如果使用指针,可以直接以一维的方式访问二维数组。尽管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;
                }
            }
        }
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2013-04-09
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
相关资源
最近更新 更多