Урок 14. Сортировка массивов

Дата изменения: 15 апреля 2021
Лабораторные работы си шарп. Сортировка массивов

Приложения для Windows forms

Лабораторная работа

Выполнить: Разработать приложение, которое сортирует предложенный массив целых чисел из некоторого интервала по возрастанию.

Пример выполнения:

Сортировка массивов в Visual Basic

Форма «Сортировка массива»


[Название проекта: Lesson_14Lab1, название файла L14Lab1.cs]

✍ Выполнение:

  1. Рассмотрим задачу упорядочивания массива в простейшей постановке: дан числовой массив х1, …, хn, элементы которого попарно различны, требуется переставить элементы массива так, чтобы после перестановки они были упорядочены в порядке возрастания: х1< … < хn. Опишем алгоритм решения этой задачи.
  2. Используем алгоритм сортировки выбором. Суть его такова: очевидно, что первое место в массиве должен занять наименьший элемент, второе – наименьший из всех остальных элементов и т.д. Пусть x1, …, xi-1 уже получили нужные значения. Тогда определение индекса k наименьшего из xi, xi+1, … xn и перестановка xi c xk приведут к тому, что x1, …, xi будут иметь нужные значения. Составим программу для этого алгоритма.
  3. Создайте новый проект и разместите элементы управления (txtN, txtMin, txtMax, lblArr, lblResult, btnNewArr, btnSort и btnExit) на форме так, как показано на рисунке (рисунок). Используйте элемент GroupBox для группировки.
  4. Установите значение для свойства Enabled кнопки btnSort равным False (т.о., заблокировав кнопку).
  5. Самостоятельно запрограммируйте кнопку Выход.
  6. Заблокируйте текстовое поле btnN, т.к. мы будем использовать 10 элементов массива (свойство Enabled = false).
  7. В разделе описаний объявите массив из 10 элементов следующим образом:
  8. private int[] Arr = new int[10];
  9. Теперь необходимо инициализировать наш массив целыми числами из некоторого промежутка. Процедура обработки события Click для кнопки btnNewArr выглядит следующим образом:
private void btnNewArr_Click(object sender, EventArgs e)
        {
            int n = 10;
            int a = int.Parse(txtMin.Text);
            int b = int.Parse(txtMax.Text);
            Random r = new Random();
            for(int i = 0; i < n; i++)
            {
                Arr[i] = r.Next(a, b);
                lblArr.Text += Arr[i];
                if (i!=n) lblArr.Text += ", ";
            }
            btnSort.Enabled = true;
        }
  • Наконец, реализуем описанный выше алгоритм сортировки в процедуре обработки события Click для кнопки btnSort. Предварительно опишем функцию MinNumber, которая осуществляет поиск позиции минимального элемента массива:
  •  private int MinNumber(int [] x, int m)
            {
                int min = x[m];
                int MinN = m;
                for (int i = m; i<x.Length; i++){
                    if (x[i] <min){
                        min = x[i];
                        MinN = i;
                    }
                }
                return MinN;
            }
  • Теперь опишем главный фрагмент кода, который вызывает функцию поиска позиции минимума, начиная с нулевой позиции массива; затем, после выполнения функции, на нулевое место становится минимальный элемент, а функция вызывается с аргументом уже первой (а не нулевой) позиции (затем второй позиции и т.д.):
  • private void btnSort_Click(object sender, EventArgs e)
            {
                int k, t;
                for(int i=0; i < Arr.Length; i++)
                {
                    k = MinNumber(Arr, i);
                    t = Arr[i];
                    Arr[i] = Arr[k];
                    Arr[k] = t;
                    lblResult.Text += Arr[i];
                    if (i != Arr.Length - 1) { lblResult.Text += ", "; } 
                }
                btnSort.Enabled = false;
            }
  • Запустите и отладьте приложение. Вы, очевидно, заметили, что программа начинает некорректно работать при повторном нажатии на кнопку Новый массив. Для того чтобы выправить эти дефекты, создадим процедуру для очистки окон ClearFiealds:
  • private void ClearFields()
            {
                lblArr.Text = "";
                lblResult.Text = "";
                btnSort.Enabled = false;
            }
  • Вызовем созданную подпрограмму в начале процедуры обработки события Click для кнопки btnNewArr, а также в процедурах обработки события Change для текстовых окон txtMin и txtMax следующим образом:
  • ClearFields();
  • Запустите и отладьте приложение.
  • Дополнительное задание:

    Самостоятельно разработать программу для реализации алгоритма сортировки вставками. Суть этого алгоритма в следующем: просматриваются последовательно элементы массива х2, …, хn и каждый новый элемент xi вставляется на подходящее место в уже упорядоченную совокупность x1, …, xi-1. Это место определяется последовательным сравнением xi с упорядоченными элементами x1, …, xi-1. При решении этой задачи необходимо описать и использовать функцию Insertion, которая вставляет xi на подходящее место в уже упорядоченную последовательность x1, …, xi-1.

    Вопросы для самоконтроля:

    1. Какие алгоритмы сортировок Вы знаете? Опишите один их них.
    2. Как передать массив в процедуру в качестве параметра?

    * При использовании материалов обязательна ссылка на источник: Майер С.Ф., «Языки программирования (C#) / Programming languages (C#)» — Учебно-методическое пособие : Южный федеральный университет. – Ростов-на-Дону, 2020. – 212 с.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    *
    *


    Вставить формулу как
    Блок
    Строка
    Дополнительные настройки
    Цвет формулы
    Цвет текста
    #333333
    Используйте LaTeX для набора формулы
    Предпросмотр
    \({}\)
    Формула не набрана
    Вставить