Содержание
Задача: создать двумерный массив размерностью m
на n
элементов, заполнив его случайными числами в диапазоне от 0
до 9
. Отсортировать элементы массива по возрастанию вначале по строкам, а затем по столбцам. Вывести на экран исходный массив, массив отсортированный по-строчно, массив отсортированный по столбцам. Для сортировки применить метод пузырька.
Что необходимо знать
Для выполнения работы нам необходимо знать:
- Основные сведения по работе с многомерными и одномерными массивами
- Как реализуется алгоритм сортировки массива «Сортировка пузырьком«
- Как в C# генерировать случайные числа
Ход выполнения работы
Необходимые методы
Исходя из условий задачи, нам потребуется написать следующие методы:
- Метод генерации двумерного массива заданной размерности
- Метод вывода массива в консоль
- Метод сортировки массива алгоритмом пузырька
Метод генерации двумерного массива заданной размерности
public static int[,] GenerateArray(int t, int i) { int[,] table = new int[t, i]; Random random = new Random(); for (int a = 0; a < t; a++) { for (int b = 0; b < i; b++) { table[a, b] = random.Next(0, 9); } } return table; }
На входе метод получает размерности массива. Далее, создается сам массив:
int[,] table = new int[t, i];
Объект класса Random
для генерации случайных чисел:
Random random = new Random();
Random
представляет генератор псевдослучайных чисел, то есть использует такой алгоритм, который генерирует последовательность чисел, отвечающую определенным статистическим критериям случайности.После этого, в цикле происходит заполнение массива цифрами от 0
до 9
:
table[a, b] = random.Next(0, 9);
Метод вывода двумерного массива в консоль
public static void PrintArray(int[,] array) { for (int a = 0; a < array.GetLength(0); a++) { for (int b = 0; b < array.GetLength(1); b++) { Console.Write(array[a, b] + " "); } Console.WriteLine(); } }
Здесь все достаточно просто. Так как мы точно знаем, что массив двумерный, то используем два цикла for
, в которых проходимся по соответствующим измерениям массива и выводим значения элементов на экран. В консоли это будет выглядеть, например, следующим образом:
4 7 0 6 0 8
6 8 5 5 8 8
4 4 7 7 5 3
7 2 2 5 3 3
Метод сортировки массива по возрастанию
Здесь мы можем использовать уже имеющийся алгоритм сортировки массива методом пузырька, который можно увидеть здесь.
Реализация сортировки двумерного массива
Суть реализации сортировки двумерного массива, в зависимости от того, как сортируется массив, можно представить следующим образом:
- Создаем временный одномерный массив с количеством элементов равным количеству элементов в каждой строке (или каждом столбце) исходного массива.
- Сортируем временный массив
- Переносим отсортированные значения из временного массива в исходный массив.
Ниже представлена реализация этого алгоритма:
static void Main(string[] args) { int colCount = 6;//m int rowCount = 5;//n int[,] arr = GenerateArray(rowCount, colCount); Console.WriteLine("Исходный массив"); PrintArray(arr); Console.WriteLine("Сортировка по строкам: "); int[] row = new int[colCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < colCount; j++) row[j] = arr[i, j]; BubbleSort(row); Insert(true, i, row, arr); } PrintArray(arr); Console.WriteLine("Сортировка по столбцам: "); int[] col = new int[rowCount]; for (int i = 0; i < colCount; i++) { for (int j = 0; j < rowCount; j++) col[j] = arr[j, i]; BubbleSort(col); Insert(false, i, col, arr); } PrintArray(arr); } public static void Insert(bool isRow, int dim, int[] source, int[,] dest) { for (int k = 0; k < source.Length; k++) { if (isRow) dest[dim, k] = source[k]; else dest[k, dim] = source[k]; } }
здесь метод Insert
— это вспомогательный метод с помощью которого мы меняем значения в стоке или столбце исходного массива на отсортированные значения.
Полный исходный код программы
Ниже представлен полный исходный код программы для сортировки двумерного массива методом пузырька:
using System; namespace BabbleSort { internal class Program { static void Main(string[] args) { int colCount = 6;//m int rowCount = 5;//n int[,] arr = GenerateArray(rowCount, colCount); Console.WriteLine("Исходный массив"); PrintArray(arr); Console.WriteLine("Сортировка по строкам: "); int[] row = new int[colCount]; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < colCount; j++) row[j] = arr[i, j]; BubbleSort(row); Insert(true, i, row, arr); } PrintArray(arr); Console.WriteLine("Сортировка по столбцам: "); int[] col = new int[rowCount]; for (int i = 0; i < colCount; i++) { for (int j = 0; j < rowCount; j++) col[j] = arr[j, i]; BubbleSort(col); Insert(false, i, col, arr); } PrintArray(arr); } public static void Insert(bool isRow, int dim, int[] source, int[,] dest) { for (int k = 0; k < source.Length; k++) { if (isRow) dest[dim, k] = source[k]; else dest[k, dim] = source[k]; } } public static int[,] GenerateArray(int t, int i) { int[,] table = new int[t, i]; Random random = new Random(); for (int a = 0; a < t; a++) { for (int b = 0; b < i; b++) { table[a, b] = random.Next(0, 9); } } return table; } public static void PrintArray(int[,] array) { for (int a = 0; a < array.GetLength(0); a++) { for (int b = 0; b < array.GetLength(1); b++) { Console.Write(array[a, b] + " "); } Console.WriteLine(); } } static void BubbleSort(int[] inArray) { for (int i = 0; i < inArray.Length; i++) for (int j = 0; j < inArray.Length - i - 1; j++) { if (inArray[j] > inArray[j + 1]) { int temp = inArray[j]; inArray[j] = inArray[j + 1]; inArray[j + 1] = temp; } } } } }
Пример работы приложения представлен ниже:
6 2 7 7 3 3
4 2 5 0 4 3
8 8 5 5 6 5
4 0 6 2 1 1
7 1 7 7 2 4
Сортировка по строкам:
2 3 3 6 7 7
0 2 3 4 4 5
5 5 5 6 8 8
0 1 1 2 4 6
1 2 4 7 7 7
Сортировка по столбцам:
0 1 1 2 4 5
0 2 3 4 4 6
1 2 3 6 7 7
2 3 4 6 7 7
5 5 5 7 8 8
Итого
Для выполнения работы нам потребовались знания о том, как работать с одномерными и многомерными массивами в C#, как генерировать псевдослучайные числа в C#, а также основные сведения по методам сортировки одномерных массивов.