| Нидерланды |
Способы сортировок
Задача темы: изучить методику и получить навыки в разработке функциональности приложений, использующих сортировки текстовых данных.
Разработка: Приложение "Способы сортировки" для сортировки массива цифровых переменных.
Состав выполняемых функций:
- Файловые операции: нет
- Алгоритмы: пузырковая и Quick-сортировка
- Информационно-справочные:нет
Наращивание функциональности не предусматривается.
Защита данных предусматривается только от неквалифицированных действий пользователей.
В качестве входных данных используется набор переменных. Выходные данные программы – графическое отображение результатов в виде двух листбоксов в форме для SmartDevice.
Шаг 1. Разработка графического интерфейса
Используется только одна форма Form1 с одним текстовым полем, двумя листбоксами и тремя кнопками "Добавить", "Пузырек" и "Квик". Примерный дизайн приведен на рис.6.1.
Шаг 2. Добавление системных библиотек
using System; using System.Drawing; using System.Collections; using System.Windows.Forms; using System.Data; // добавляем библиотеку сомпонентов using System.ComponentModel;
Шаг 3. Добавляем массив переменных в состав public class Form1 : System.Windows.Forms.Form
int[] numbers = new int[16];
Шаг 4. Создаем процедуру ввода данных в листбоксы
Для кнопки "Добавить" пишем:
private void button1_Click(object sender, System.EventArgs e)
{ // Проверка - если в текстовом поле не цифра
if (!char.IsDigit(textBox1.Text[0])) {
textBox1.Text = "Введите цифру";
MessageBox.Show("Введите цифру!","Ошибка");
return; // влзврат в вызывающую программу}
listBox1.Items.Add(textBox1.Text); // добавляем строку в листбокс 1
listBox2.Items.Add(textBox1.Text); // добавляем строку в листбокс 2
}Шаг 5. Создаем процедуру пузырьковой сортировки
Для кнопки "Пузырек" пишем:
private void button2_Click(object sender, System.EventArgs e) {
bool flipped = false; // определяем булеву переменную со значением false
for(int i = listBox1.Items.Count - 1; i <= 0; i--) {// вложенный цикл
for(int j = 0; j < i; j++) {/* преобразуем цифры в числа Int32 и
задаем условие проверки значений по строкам */
if(Convert.ToInt32(listBox1.Items[j]) <
Convert.ToInt32(listBox1.Items[j + 1]) )
{
Object temp = listBox1.Items[j]; // определяем массив
listBox1.Items[j] = listBox1.Items[j + 1];
listBox1.Items[j + 1] = temp;
flipped = true; // переопределяем булеву переменную
}
}
if(!flipped) return;
}
}Шаг 6. Создаем функцию сортировки "Квик"
void QuickSort(ref int[] a, int lo0, int hi0)
{
int lo = lo0;
int hi = hi0;
if(lo <= hi) {return;}
else if( lo = = hi - 1 )
{// если необходимо, меняем два соседних элемента местами
if (a[lo] < a[hi]) {
int T = a[lo];
a[lo] = a[hi];
a[hi] = T;
}
return;
}
int pivot = a[(lo + hi) / 2]; // меняем местами средний
a[(lo + hi) / 2] = a[hi]; // и верхний элементы
a[hi] = pivot;
while( lo < hi ) {
while (a[lo] <= pivot && lo < hi) // слева направо
{// ищем элемент,
lo++; // больший среднего
}
while (pivot <= a[hi] && lo < hi ) // справа налево
{// ищем элемент,
hi--; // меньший среднего
}
if( lo < hi ) // меняем найденные
{// элементы местами
int T = a[lo];
a[lo] = a[hi];
a[hi] = T;
}
}
a[hi0] = a[hi]; // помещаем средний элемент в центр списка
a[hi] = pivot;
QuickSort(ref a, lo0, lo-1); // рекурсивно вызываем функцию
QuickSort(ref a, hi+1, hi0);
}Шаг 7. Создаем процедуру вызова функции сортировки "Квик"
Для кнопки "Квик" пишем:
int[] intItems = new int[listBox2.Items.Count]; /* задаем массив из значений, выбираемых в листбоксе 3 и запускаем цикл перебора значений в массиве */ for(int i = 0; i < listBox2.Items.Count; i++) / intItems[i] = Convert.ToInt32(listBox2.Items[i]); // вызываем функцию сортировки QuickSort(ref intItems, 0, listBox2.Items.Count - 1); for(int i = 0; i < listBox2.Items.Count; i++) // переписываем массив в отсортировонном виде listBox2.Items[i] = intItems[i]; }
