две маленькие процедуры, удобные, в принципе, для копипасты в свои проекты. на деле процедуры универсальные: работа с массивами и со списками делается через специальные worker records.

первая — HeapSort, вторая — сортировка списков (одно- или двусвязных, циклических или нет) методом MergeSort. сортировка списков, полагаю, особенно интересна: она не требует дополнительной памяти, и обладает всеми полагающимися MergeSort'у свойствами.

в сортировке списка пример, как сортировать список файлов или каталогов, полученый из Files. собственно, для этого оно мне и понадобилось; решил поделиться с народом: может, ещё кому пригодится. оригинальный код — Simon Tatham, перевод с C на D, и потом на Component Pascal — мой. а хипсорт совершенно обычный, «ничей».