Я не уверен, подходит ли это, но вы можете использовать двустороннюю очередь priority , чтобы применить быструю сортировку к файлу, слишком большому, чтобы уместиться в память.Идея состоит в том, что в обычной быстрой сортировке вы выбираете элемент в качестве оси, а затем разделяете элементы на три группы: элементы меньше, чем точка, элементы равны, а элементы больше, чем точка.Если вы не можете поместить все элементы в память одновременно, вы можете адаптировать это решение следующим образом.Вместо того, чтобы выбрать один элемент в качестве основного, вместо этого выберите какое-то огромное количество элементов (скажем, столько, сколько вы можете уместить в ОЗУ) и вставьте их в очередь с двусторонним приоритетом.Затем сканируйте остальные элементы по одному.Если элемент меньше, чем наименьший элемент очереди с двусторонним приоритетом, поместите его в группу элементов, меньшую, чем все сводные объекты.Если он больше, чем самый большой элемент очереди с приоритетами, поместите его в группу элементов, превышающую сводные.В противном случае вставьте элемент в очередь с двусторонним приоритетом, а затем вытолкните либо самый маленький, либо самый большой элемент из очереди и поместите его в соответствующую группу.Как только вы закончите делать это, вы разделите элементы на три части - группу небольших элементов, которые затем можно будет рекурсивно отсортировать, группу элементов в середине, которые теперь полностью отсортированы (так как если вы удалите их все из очереди)из очереди с двусторонним приоритетом они будут извлечены в отсортированном порядке), а также из группы элементов, превышающей средние элементы, которые также могут быть отсортированы.
Для получения дополнительной информации об этом алгоритме и двустороннемПриоритетные очереди в общем, рассмотрите эту ссылку к главе по теме.