Автор: 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
Все правильно - недостаток дидактической практики: решения, которые я считаю крайне неэффективными, отбрасываются на уровне подсознания - "этого делать нельзя, и точка!"