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

5 апреля 2009

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

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

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

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

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

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

Программа не большая и довольно проста. Рассмотрим процедуру “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” записывается число равное количеству операций, которых нам понадобилось выполнить, чтобы отсортировать массив.

Пример выполнения программы Переставить числа 0, 1 и 2 в порядке возрастания

Пример выполнения программы Переставить числа 0, 1 и 2 в порядке возрастания

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

Автор: Евтеев Евгений Александрович

  • Реклама сайта
  • Категории