Как создать сортировку двумерного массива по возрастанию с#
Как создать сортировку двумерного массива, по возрастанию? Второй день ломаю голову и ни к чему не прихожу, нужна помощь :( на c#
Например есть массив
- 4,7,8
- 5,2,3
- 6,7,9
Как сделать сортировку его так, что бы получился по возрастанию, то бишь
- 2,3,4
- 5,6,7
- 7,8,9
Ответы (2 шт):
Автор решения: Алексей Шиманский
→ Ссылка
- Надо сложить все элементы двумерного массива в одномерный (двойной цикл)
- Отсортировать одномерный массив
- Из одномерного массива положить данные в многомерный, пробегаясь от начала одномерного к его концу (можно также использовать два цикла)
Второй вариант:
Если представить, что двумерный массив, это одномерный (ведь у него также индексы идут с 0 до N по возрастанию.....можно представить, что это змея, которая свернулась несколько раз), то можно спокойно применять метод сортировки одномерного массива с поправкой на то, что будут два цикла. ¯\_(ツ)_/¯
Автор решения: Hostik Den
→ Ссылка
Пример по методу Алексея Шиманского:
Console.Clear();
int[,] myMatrix = new int[3, 3]
{
{4,7,8},
{5,2,3},
{6,7,9}
};
Console.WriteLine($"####### DEFAULT MATRIX #######\n");
PrintArray(myMatrix);
int[] myArray = new int[9];
int z = 0;
for (int i = 0; i < myMatrix.GetLength(0); i++)
for (int j = 0; j < myMatrix.GetLength(1); j++)
{
myArray[z] = myMatrix[i, j];
z++;
}
for (int i = 0; i < myArray.Length; i++) { }
int[] result = myArray.OrderBy(i => i).ToArray();
for (int i = 0; i < result.Length; i++) { }
Console.WriteLine($"####### SORT MATRIX #######\n");
int[,] sortMyMatrix = new int[3, 3];
int k = 0;
for (int i = 0; i < sortMyMatrix.GetLength(0); i++)
{
for (int j = 0; j < sortMyMatrix.GetLength(1); j++)
{
sortMyMatrix[i, j] = result[k];
Console.Write($"{sortMyMatrix[i, j]}\t");
k++;
}
Console.WriteLine($"\n");
}
void PrintArray(int[,] matr)
{
for (int i = 0; i < matr.GetLength(0); i++)
{
for (int j = 0; j < matr.GetLength(1); j++)
Console.Write($"{matr[i, j]}\t");
Console.WriteLine($"\n");
}
}