Сортировка массива
Задача темы: изучить методику и получить навыки в разработке функциональности приложений, использующих сортировки текстовых данных. В отличие от предыдущей задачи, в которой сортировались текстовые строки, состоящие только из цифр, здесь ставится задача сортировки строки из букв.
Разработка: Приложение "Сортировка " для сортировки массива переменных типа Char с использованием функции сортировки, определенной в отдельном классе.
Состав выполняемых функций:
- Файловые операции: нет
- Алгоритмы: Quick-сортировка
- Информационно-справочные:нет
Наращивание функциональности не предусматривается.
Защита данных не предусматривается.
В качестве входных данных используется текстовая строка. Выходные данные программы – графическое отображение результатов в виде текстового поля и листбокса в форме для SmartDevice.
Шаг 1. Разработка графического интерфейса
Используется одна форма с двумя текстовыми полями – одно для ввода (указываем свойство Text= Исходный массив ), другое и листбокс – для вывода отсортированного массива. Предусматриваются кнопка запуска процедуры сортировки "Сортировать" и кнопка очистки поля ввода "Очистить". Примерный дизайн показан на рис. 7.1.
Шаг 2. Добавляем в проект новый класс
Новому классу присваиваем имя Quicksort (хотя это и необязательно – можно использовать имя по умолчанию Class1 )
Шаг 3. Создаем функцию сортировки qs в public class Quicksort
Так как функция сортировки массива определена в отдельном классе, то для того, чтобы сделать ее доступной из другого класса используем определение static. Вместо public Quicksort() пишем:
static void qs(char[] items,int left,int right) { int i,j; char x,y; i=left; j=right; x=items[(left+right)/2]; do { while((items[i]<x)&&(i<right)) i++; while((x<items[j])&&(j>left)) j--; if(i<=j) {y=items[i]; items[i]=items[j]; items[j]=y; i++; j--; } } while(i<=j); if(left<j) qs(items,left,j); // рекурсивный вызов функции сортировки Квик if(i<right) qs(items,i,right); }
Шаг 4. Создаем функцию qsort для рекрсивного вызова функции сортировки qs в public class Quicksort
public static void qsort(char[] items) {//вызывается функция qs с параметрами исходного массива Char qs(items,0,items.Length-1); }
Шаг 5. Создаем процедуру запуска сортировки
Для кнопки "Сортировать" класса Form1 пишем:
private void button1_Click(object sender, System.EventArgs e) { /* Так как string это сумма char, то нужно выполнить конвертацию посимвольно */ string CharValidate =this.textBox1.Text; /* задаем строковую переменную, в которую считываем значения из текстового поля и преобразуем строку в массив кодов символов */ char[] a=CharValidate.ToCharArray(); int i; string s_old=""; for(i=0;i<a.Length;i++) s_old=s_old+a[i].ToString(); textBox1.Text=s_old; Quicksort.qsort(a); //вызов функции - срабатывает подсказка редактора! string s_new=""; for(i=0;i<a.Length; i++) s_new=s_new+a[i].ToString(); textBox2.Text=s_new; // выводим результат сортировки в textBox2 // а теперь запускаем цикл построчного заполнения листбокса for(i=0;i<a.Length; i++) listBox1.Items.Add(a[i]); }
Шаг 6. Создаем процедуру очистки результатов
Для кнопки "Очистить" пишем:
private void button2_Click(object sender, System.EventArgs e) { textBox1.Text="Исходный массив"; textBox2.Text="Отсортированный массив"; listBox1.Items.Clear(); }