Приложения для Windows forms
Выполнить: Разработать приложение, которое сортирует предложенный массив целых чисел из некоторого интервала по возрастанию.
Пример выполнения:
[Название проекта:
Lesson_14Lab1
, название файла L14Lab1.cs
]
✍ Выполнение:
- Рассмотрим задачу упорядочивания массива в простейшей постановке: дан числовой массив х1, …, хn, элементы которого попарно различны, требуется переставить элементы массива так, чтобы после перестановки они были упорядочены в порядке возрастания: х1< … < хn. Опишем алгоритм решения этой задачи.
- Используем алгоритм сортировки выбором. Суть его такова: очевидно, что первое место в массиве должен занять наименьший элемент, второе – наименьший из всех остальных элементов и т.д. Пусть x1, …, xi-1 уже получили нужные значения. Тогда определение индекса k наименьшего из xi, xi+1, … xn и перестановка xi c xk приведут к тому, что x1, …, xi будут иметь нужные значения. Составим программу для этого алгоритма.
- Создайте новый проект и разместите элементы управления (txtN, txtMin, txtMax, lblArr, lblResult, btnNewArr, btnSort и btnExit) на форме так, как показано на рисунке (рисунок). Используйте элемент GroupBox для группировки.
- Установите значение для свойства Enabled кнопки btnSort равным False (т.о., заблокировав кнопку).
- Самостоятельно запрограммируйте кнопку Выход.
- Заблокируйте текстовое поле btnN, т.к. мы будем использовать 10 элементов массива (свойство Enabled = false).
- В разделе описаний объявите массив из 10 элементов следующим образом:
- Теперь необходимо инициализировать наш массив целыми числами из некоторого промежутка. Процедура обработки события Click для кнопки btnNewArr выглядит следующим образом:
private int[] Arr = new int[10]; |
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; } |
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; } |
private void ClearFields() { lblArr.Text = ""; lblResult.Text = ""; btnSort.Enabled = false; } |
ClearFields(); |
Самостоятельно разработать программу для реализации алгоритма сортировки вставками. Суть этого алгоритма в следующем: просматриваются последовательно элементы массива х2, …, хn и каждый новый элемент xi вставляется на подходящее место в уже упорядоченную совокупность x1, …, xi-1. Это место определяется последовательным сравнением xi с упорядоченными элементами x1, …, xi-1. При решении этой задачи необходимо описать и использовать функцию Insertion, которая вставляет xi на подходящее место в уже упорядоченную последовательность x1, …, xi-1.
- Какие алгоритмы сортировок Вы знаете? Опишите один их них.
- Как передать массив в процедуру в качестве параметра?