Сортировка в одном файле

Алгоритм упорядочения данных в одном файле (то есть на месте) получается естественным обобщением метода пузырька. Роль такого пузырька играет порция данных, в которой постепенно накапливаются записи с наибольшими (или наименьшими) значениями ключа. Величина порции составляет половину выделенного для сортировки объема оперативной памяти. Допустим, что файл разбивается на N порций (зон).

В начале процесса в память считываются две первые порции (зоны) данных и упорядочиваются там как единый массив, после чего половина массива с меньшими значениями ключа (назовем ее "нижней") записывается во вторую зону. На освободившееся место считывается третья зона, содержимое памяти вновь сортируется каким либо методом внутренней сортировки, и нижняя половина записывается в третью зону. Процесс повторяется для всех зон до N-1 включительно. После считывания N-й зоны и внутренней сортировки уже верхняя половина (пузырек) записывается в N-ю зону. Таким образом ключи последней зоны уже заняли свое окончательное положение в файле. Процесс повторяется для оставшихся N-1 зоны , затем для оставшихся N-2 зоны и т.д.

Ниже приведен текст функции, реализующей алгоритм.

int BubbleExternSort(char *FileName, int RecLen,

int (*cmp)(const void *r1, const void *r2), int MemSize){

// Внешняя сортировка пузырьком

// FileName - имя бинарного файла, содержащего таблицу

// RecLen - длина записи

// cmp - функция, сравнивающая ключи записей

// возвращает -1,0,1

// MemSize - размер оперативной памяти, который разрешено

// использовать для сортировки

// при нормальном завершении возвращает 0

// в противном случае - код ошибки

int h; // дескриптор файла

long FileSize; // размер файла

unsigned long nZon; // число зон

int ZonSize; // размер зоны в байтах

Int i;

char *Buffer; // память для сортировки








Дата добавления: 2014-12-02; просмотров: 833;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.