Переставить числа 0, 1 и 2 в порядке возрастания, используя перестановку 2-х элементов

В данной статье будет разобрано решение следующей задачи:
В массиве стоят числа 0, 1 и 2. Переставить их в порядке возрастания, если единственной разрешенной операцией (помимо чтения) над массивом является перестановка двух элементов.

Реализовать программный код будем на C# в среде разработки Visual Studio 2008 как Windows приложение с формами.
Начинаем, конечно, с создания проекта с формой. На форме нужно разместить следующие объекты:

  1. Надпись Label.
  2. Текстовое поле Textbox, переименовать имя в “cout_oper”.
  3. Кнопку Button, переименовать в “work”.
  4. Два текстовых поля большой длины RichTextbox, переименовать в “ data_mas ” и “date_mas_ch” соответственно.

Пример показан на рисунке:

Форма приложения

Форма приложения

Программа не большая и довольно проста. Рассмотрим процедуру “work_Click(), которая вызывается всякий раз, когда происходит событие клика по кнопке “work”:

private void work_Click(object sender, EventArgs e)
{
data_mas.Clear();
date_mas_ch.Clear();
Random r = new Random();
int c_m = r.Next(10, 30), count = 0;
int[] mass = new int[c_m];
for (int i = 0; i < c_m; i++)
{
mass[i] = r.Next(0, 3);
data_mas.Text = data_mas.Text + " " + mass[i];
}
for (int i = 0; i < c_m; i++)
{
int k = i, x = mass[i];
for (int j = i + 1; j < c_m; j++)
if (mass[j] < x)
{
k = j;
x = mass[j];
count++;
}
mass[k] = mass[i];
mass[i] = x;
}
for (int i = 0; i < c_m; i++)
date_mas_ch.Text = date_mas_ch.Text + " " + mass[i];
cout_oper.Text = Convert.ToString(count);
}

В этой процедуре сначала происходит очистка текстовых полей большой длины, чтобы при следующем запуске процедуры поля заполнялись только новыми данными. Дальше генерируем длину массива от 10 до 30 и создаем его. В первом цикле for происходит заполнение массива числа 0, 1 или 2 также случайно и вывод его в форму.

Затем мы используем сортировку, переставляя два элемента, если это необходимо. Самый последний цикл for выводит отсортированный в порядке возрастания массив в поле “date_mas_ch”, а в поле “cout_oper” записывается число равное количеству операций, которых нам понадобилось выполнить, чтобы отсортировать массив.

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

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


Теперь пробуйте запустить приложение. Пример выполнения программы показан выше.

Автор: Евтеев Евгений Александрович
Email: evteev_e2003@mail.ru

Запись опубликована в рубрике C/C++/C# с метками . Добавьте в закладки постоянную ссылку.

Комментарии запрещены.