Опубликован: 09.09.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Российская международная академия туризма
Лекция 8:

Сортировка массива

< Лекция 7 || Лекция 8 || Лекция 9 >
Аннотация: В лекции разобран пример реализации быстрой сортировки массива переменных типа Char. Рассмотрено преобразование строки в массив символов

Задача темы: изучить методику и получить навыки в разработке функциональности приложений, использующих сортировки текстовых данных. В отличие от предыдущей задачи, в которой сортировались текстовые строки, состоящие только из цифр, здесь ставится задача сортировки строки из букв.

Разработка: Приложение "Сортировка " для сортировки массива переменных типа Char с использованием функции сортировки, определенной в отдельном классе.

Состав выполняемых функций:

  • Файловые операции: нет
  • Алгоритмы: Quick-сортировка
  • Информационно-справочные:нет

Наращивание функциональности не предусматривается.

Защита данных не предусматривается.

В качестве входных данных используется текстовая строка. Выходные данные программы – графическое отображение результатов в виде текстового поля и листбокса в форме для SmartDevice.

Шаг 1. Разработка графического интерфейса

Используется одна форма с двумя текстовыми полями – одно для ввода (указываем свойство Text= Исходный массив ), другое и листбокс – для вывода отсортированного массива. Предусматриваются кнопка запуска процедуры сортировки "Сортировать" и кнопка очистки поля ввода "Очистить". Примерный дизайн показан на рис. 7.1.


Рис. 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();
}
< Лекция 7 || Лекция 8 || Лекция 9 >
jo jojo
jo jojo
Нидерланды
Ярославй Грива
Ярославй Грива
Россия, г. Санкт-Петербург