Я шукаю алгоритми сортування, які можуть працювати на великому обсязі даних, тобто вони можуть працювати навіть тоді, коли весь набір даних не може міститись в основній пам'яті відразу.
Єдиним кандидатом, який я до цього часу знайшов, є сортування злиття: ви можете реалізувати алгоритм таким чином, щоб він сканував ваш набір даних при кожному злитті, не утримуючи відразу всі дані в основній пам'яті. Про маю на увазі зміну сорту злиття описано в цій статті в розділі Використання стрічкових накопичувачів .
Я думаю, що це хороше рішення (зі складністю O (nx log (n)), але мені цікаво дізнатись, чи існують інші (можливо швидші) алгоритми сортування, які можуть працювати на великих наборах даних, які не входять в основну пам'ять.
EDIT
Ось ще кілька деталей, як цього вимагають відповіді:
- Дані потрібно періодично сортувати, наприклад, раз на місяць. Мені не потрібно вставляти кілька записів і поступово сортувати дані.
- У моєму прикладі текстовий файл становить близько 1 Гб тексту UTF-8, але я хотів вирішити проблему в цілому, навіть якщо цей файл був, скажімо, 20 ГБ.
- Він не знаходиться в базі даних, і через інші обмеження цього не може бути.
- Ці дані скидаються іншими як текстовий файл, у мене є власний код для читання цього текстового файлу.
- Формат даних - це текстовий файл: нові символи рядків є роздільниками записів.
Одне з можливих вдосконалень, які я мав на увазі, - це розділити файл на файли, які є досить маленькими, щоб бути відсортованими в пам'яті, і, нарешті, об'єднати всі ці файли за допомогою алгоритму, який я описав вище.