Базы данных для карманного персонального компьютера

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

Показывать лекцию целиком

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

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