Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Сотртировка в файлах

Автор: Gendalf 16.12.2007 19:20

Подскажите пожалуйста наилучший алгорит сортировки записей в типизированном файле. фаил безразмерный, и желательно не использовать буферные файлы.

В FAQ прочитал про методы сортировок, но они все сортировки массивов, а нет ли какой-нибудь сортировки, предназначенной для сортировки типизированных файлов.

Или единственный способ - это с помощью указателя представлять фаил, как массив и использовать приведенные выше сортировки

Автор: andriano 16.12.2007 19:40

Наилучшего алгоритма вообще в природе не существует. Могут быть наилучшие в каком-то конкретном случае.
Непонятно, что такое безазмерный файл.
Если допорлнительые файлы использовать нельзя, то сортировать можно, естественно, только в оперативной памяти. Т.е.:
1. Считываешь файл.
2. Сортируешь.
3. Записываешь.
Можно, конечно, использовать memory-mapped file, но вряд ли это чем-либо удобнее.
И еще: если объем файла больше объема виртуальной памяти, то считать файл в память, разумеется, не получится.

Автор: Lapp 16.12.2007 19:41

Цитата(Gendalf @ 16.12.2007 15:20) *

с помощью указателя представлять фаил, как массив и использовать приведенные выше сортировки

Указатели тут ни при чем. Используй процедуру Seek. В остальном - да, аналогично массивами. Другой вопрос, какой метод будет более эффективен именно для файлов..

Добавлено через 1 мин.
Цитата(andriano @ 16.12.2007 15:40) *

Если допорлнительые файлы использовать нельзя, то сортировать можно, естественно, только в оперативной памяти.
Конечно, нет (см. мой пост выше)

Автор: andriano 16.12.2007 19:47

Цитата(Lapp @ 16.12.2007 15:41) *
Конечно, нет (см. мой пост выше)
Гм...
Я понимаю, что "если нельзя, но очень хочется, то можно", но сколько времени это займет?
Хотя с академической точки зрения - да, достаточно, чтобы в ОП помещались два элеиента данных.

Автор: Lapp 16.12.2007 20:07

Цитата(andriano @ 16.12.2007 15:47) *

"если нельзя, но очень хочется, то можно", но сколько времени это займет?

Ответ должен соответствовать вопросу. Откуда ты знаешь - может, файл в на устройстве в оперативной памяти? Насчет скорости ты можешь предостеречь, если хочешь, но сначала - дай правильный ответ на поставленный вопрос.

Автор: andriano 16.12.2007 20:29

Все правильно - недостаток дидактической практики: решения, которые я считаю крайне неэффективными, отбрасываются на уровне подсознания - "этого делать нельзя, и точка!" smile.gif