| Нидерланды |
Сортировка массива
Задача темы: изучить методику и получить навыки в разработке функциональности приложений, использующих сортировки текстовых данных. В отличие от предыдущей задачи, в которой сортировались текстовые строки, состоящие только из цифр, здесь ставится задача сортировки строки из букв.
Разработка: Приложение "Сортировка " для сортировки массива переменных типа 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();
}
