166 lines
4.9 KiB
Plaintext
166 lines
4.9 KiB
Plaintext
|
|
=encoding UTF-8
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head1 НАИМЕНОВАНИЕ
|
|||
|
|
|
|||
|
|
BH_Algo - Общие алгоритмы
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head1 СИНТАКСИС
|
|||
|
|
|
|||
|
|
#include <BH/Algo.h>
|
|||
|
|
|
|||
|
|
int data[4] = {5, 2, 3, 1};
|
|||
|
|
int value, i;
|
|||
|
|
|
|||
|
|
value = 4;
|
|||
|
|
BH_Partition(&value, data, 4, sizeof(int), intEqual);
|
|||
|
|
BH_Sort(data, 4, sizeof(int), intEqual);
|
|||
|
|
BH_HeapMake(data, 4, sizeof(int), intEqual);
|
|||
|
|
|
|||
|
|
cc prog.c -o prog -lbh
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head1 ОПИСАНИЕ
|
|||
|
|
|
|||
|
|
Библиотека BH_Algo предоставляет набор алгоритмов для работы с данными:
|
|||
|
|
|
|||
|
|
=over
|
|||
|
|
|
|||
|
|
=item *
|
|||
|
|
|
|||
|
|
Обмен значениями (L</BH_Swap>)
|
|||
|
|
|
|||
|
|
=item *
|
|||
|
|
|
|||
|
|
Разбиение массива (L</BH_Partition>)
|
|||
|
|
|
|||
|
|
=item *
|
|||
|
|
|
|||
|
|
Сортировка (L</BH_Sort>)
|
|||
|
|
|
|||
|
|
=item *
|
|||
|
|
|
|||
|
|
Работа с кучей (L</BH_HeapMake>, L</BH_HeapRemove>, L</BH_HeapInsert>,
|
|||
|
|
L</BH_HeapReplace>)
|
|||
|
|
|
|||
|
|
=back
|
|||
|
|
|
|||
|
|
Эти алгоритмы позволяют эффективно выполнять различные операции над массивами и
|
|||
|
|
другими структурами данных.
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head1 API ВЫЗОВЫ
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head2 BH_Swap
|
|||
|
|
|
|||
|
|
void BH_Swap(void *dest,
|
|||
|
|
void *src,
|
|||
|
|
size_t size);
|
|||
|
|
|
|||
|
|
Меняет значение между переменными I<dest> и I<src> заданного размера I<size>.
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head2 BH_Partition
|
|||
|
|
|
|||
|
|
void *BH_Partition(void *pivot,
|
|||
|
|
void *array,
|
|||
|
|
size_t size,
|
|||
|
|
size_t element,
|
|||
|
|
BH_EqualCallback equal);
|
|||
|
|
|
|||
|
|
Разбивает массив элементов I<array> (с количеством элементов I<size> и размером
|
|||
|
|
элемента I<element>) на две группы относительно элемента I<pivot>.
|
|||
|
|
|
|||
|
|
Параметр I<equal> принимает указатель на функцию, которая сравнивает два
|
|||
|
|
элемента.
|
|||
|
|
|
|||
|
|
Параметр I<pivot> может ссылаться на элемент разбиваемого массива.
|
|||
|
|
|
|||
|
|
Функция возвращает указатель на первый элемент массива, который принадлежит
|
|||
|
|
второй группе.
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head2 BH_Sort
|
|||
|
|
|
|||
|
|
void BH_Sort(void *array,
|
|||
|
|
size_t size,
|
|||
|
|
size_t element,
|
|||
|
|
BH_EqualCallback equal);
|
|||
|
|
|
|||
|
|
Сортирует массив элементов I<array> (с количеством элементов I<size> и размером
|
|||
|
|
элемента I<element>).
|
|||
|
|
|
|||
|
|
Параметр I<equal> принимает указатель на функцию, которая сравнивает два
|
|||
|
|
элемента.
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head2 BH_HeapMake
|
|||
|
|
|
|||
|
|
void BH_HeapMake(void *array,
|
|||
|
|
size_t size,
|
|||
|
|
size_t element,
|
|||
|
|
BH_EqualCallback equal);
|
|||
|
|
|
|||
|
|
Создаёт кучу в массиве I<array> (с количеством элементов I<size> и размером
|
|||
|
|
элемента I<element>).
|
|||
|
|
|
|||
|
|
Параметр I<equal> принимает указатель на функцию, которая сравнивает два
|
|||
|
|
элемента.
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head2 BH_HeapRemove
|
|||
|
|
|
|||
|
|
void BH_HeapRemove(void *array,
|
|||
|
|
size_t size,
|
|||
|
|
size_t element,
|
|||
|
|
BH_EqualCallback equal);
|
|||
|
|
|
|||
|
|
Извлекает верхний элемент кучи в массиве I<array> (с количеством элементов
|
|||
|
|
I<size> и размером элемента I<element>).
|
|||
|
|
|
|||
|
|
Параметр I<equal> принимает указатель на функцию, которая сравнивает два
|
|||
|
|
элемента.
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head2 BH_HeapInsert
|
|||
|
|
|
|||
|
|
void BH_HeapInsert(void *value,
|
|||
|
|
void *array,
|
|||
|
|
size_t size,
|
|||
|
|
size_t element,
|
|||
|
|
BH_EqualCallback equal);
|
|||
|
|
|
|||
|
|
Добавляет элемент I<value> в кучу в массиве I<array> (с количеством элементов
|
|||
|
|
I<size> и размером элемента I<element>).
|
|||
|
|
|
|||
|
|
Если I<value> равен NULL, предполагается, что новое значение находится в конце
|
|||
|
|
массива.
|
|||
|
|
|
|||
|
|
Параметр I<equal> принимает указатель на функцию, которая сравнивает два
|
|||
|
|
элемента.
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head2 BH_HeapReplace
|
|||
|
|
|
|||
|
|
void BH_HeapReplace(void *value,
|
|||
|
|
void *array,
|
|||
|
|
size_t size,
|
|||
|
|
size_t element,
|
|||
|
|
BH_EqualCallback equal);
|
|||
|
|
|
|||
|
|
Извлекает верхний элемент кучи в массиве I<array> (с количеством элементов
|
|||
|
|
I<size> и размером элемента I<element>) и добавляет в неё элемент I<value>.
|
|||
|
|
|
|||
|
|
Если I<value> равен NULL, предполагается, что новое значение находится в конце
|
|||
|
|
массива.
|
|||
|
|
|
|||
|
|
Параметр I<equal> принимает указатель на функцию, которая сравнивает два
|
|||
|
|
элемента.
|
|||
|
|
|
|||
|
|
|
|||
|
|
=head1 СМ. ТАКЖЕ
|
|||
|
|
|
|||
|
|
L<BH>
|