
- •Лабораторная работа № 5 Параметризованные функции. Сортировка Параметризованные функции
- •Параметризованная функция обмена двух переменных
- •Сортировка
- •Пузырьковая сортировка
- •Функция пузырьковой сортировки для символьной строки
- •Н а рис.2 представлен вид окна программы, вызывающей функцию пузырьковой сортировки.
- •Сортировка методом отбора
- •Сортировка методом вставки
- •Сортировка методом Шелла
Лабораторная работа № 5 Параметризованные функции. Сортировка Параметризованные функции
Параметризованная функция, или функция-шаблон, определяет общую процедуру, которая может быть применена к изменяющимся типам данных. Для построения параметризованных функций используется ключевое слово template:
template <class Ttype> тип_функции имя_функции(список параметров)
{
... // Тело функции
}
Здесь параметр Ttype обозначает тип данных, используемых функцией. Это имя может использоваться в пределах действия определения функции. При создании конкретной версии этой функции компилятор автоматически заменит этот параметр конкретным типом данных. Конкретная версия функции называется порожденной, а процесс создания порожденной функции – конкретизацией.
Функцию-шаблон можно вызывать с данными любых типов. Компилятор автоматически создаст соответствующий конкретный экземпляр функции.
С параметризованной функцией не ассоциируются дополнительные накладные расходы (дополнительные параметры, избыточный код).
Пример. Параметризованная функция обмена двух переменных.
template <class Stype> void Swap(Stype &f,Stype &g); // Прототип
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(rbInt->Checked)
{
int x,y;
x=StrToInt(Edit1->Text);
y=StrToInt(Edit2->Text);
Swap(x,y); // Вызов функции обмена для двух целых чисел
Edit1->Text=IntToStr(x);
Edit2->Text=IntToStr(y);
}
if(rbDbl->Checked)
{
double x,y;
x=StrToFloat(Edit1->Text);
y=StrToFloat(Edit2->Text);
Swap(x,y); // Вызов функции обмена для двух чисел типа double
Edit1->Text=FloatToStr(x);
Edit2->Text=FloatToStr(y);
}
}
//---------------------------------------------------------------------------
Параметризованная функция обмена двух переменных
template <class Stype> void Swap(Stype &f,Stype &g)
{
Stype temp; // Вместо Stype будет подставлен реальный тип данных
temp=f;
f=g;
g=temp;
}
В
ид
окна программы представлен на рис. 1.
Рис.1. Окно программы примера 1.
Сортировка
Сортировка – это процесс, позволяющий упорядочить множество подобных данных в возрастающем или убывающем порядке.
Существуют две основных категории алгоритмов сортировки: алгоритмы для сортировки массивов и алгоритмы для сортировки.
Все методы сортировки можно отнести к одному из следующих классов:
Перестановка
Отбор
Вставка
При выборе метода сортировки следует учитывать следующие критерии:
Средняя скорость сортировки. Скорость сортировки зависит от количества сравнений и перестановок.
Скорость в наилучшем и наихудшем случае. Этот критерий важен, если есть основания ожидать частого повторения одной из этих ситуаций. Наилучший случай – массив отсортирован в нужном порядке. Наихудший – массив отсортирован в противоположном порядке.
Естественность поведения алгоритма. Если массив уже упорядочен, алгоритм должен выполнять наименьшее число операций, если упорядочен в обратном порядке, то число операций наибольшее.
Выполняется ли сортировка элементов с одинаковыми ключами. Этот критерий важен, если сортируются записи в списке или базе данных по некоторому ключу и необходимо, чтобы не выполнялась сортировка по другим полям, т.е. чтобы не выполнялась перестановка элементов с одинаковыми ключами.
! |
При преобразовании сортируемой строки из AnsiString в символьную строку char* необходимо завершать строку char* символом ‘\0’(окончание строки), иначе возможны ошибки – пропуск символов или лишние символы. |