Лабораторная работа по C#. Сортировка двумерного массива методом пузырька

Задача: создать двумерный массив размерностью m на n элементов, заполнив его случайными числами в диапазоне от 0 до 9. Отсортировать элементы массива по возрастанию вначале по строкам, а затем по столбцам. Вывести на экран исходный массив, массив отсортированный по-строчно, массив отсортированный по столбцам. Для сортировки применить метод пузырька.

Что необходимо знать

Для выполнения работы нам необходимо знать:

  1. Основные сведения по работе с многомерными и одномерными массивами
  2. Как реализуется алгоритм сортировки массива «Сортировка пузырьком«
  3. Как в C# генерировать случайные числа

Ход выполнения работы

Необходимые методы

Исходя из условий задачи, нам потребуется написать следующие методы:

  1. Метод генерации двумерного массива заданной размерности
  2. Метод вывода массива в консоль
  3. Метод сортировки массива алгоритмом пузырька

Метод генерации двумерного массива заданной размерности

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, в которых проходимся по соответствующим измерениям массива и выводим значения элементов на экран. В консоли это будет выглядеть, например, следующим образом:

3 7 5 6 6 8
4 7 0 6 0 8
6 8 5 5 8 8
4 4 7 7 5 3
7 2 2 5 3 3

Метод сортировки массива по возрастанию

Здесь мы можем использовать уже имеющийся алгоритм сортировки массива методом пузырька, который можно увидеть здесь.

Реализация сортировки двумерного массива

Суть реализации сортировки двумерного массива, в зависимости от того, как сортируется массив, можно представить следующим образом:

  1. Создаем временный одномерный массив с количеством элементов равным количеству элементов в каждой строке (или каждом столбце) исходного массива.
  2. Сортируем временный массив
  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#, а также основные сведения по методам сортировки одномерных массивов.

Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии