Реализация сортировки слиянием для нескольких текстовых файлов
Мне нужна программа, реализующая объединение нескольких файлов с уже отсортированными по возрастанию данными в один файл. Программа должна содержать числа или строки в порядке возрастания и убывания, например:file1.txt [1, 3, 5], file2.txt [2, 4, 5] -> output.txt [1, 2, 3, 4, 5, 5].
Также он должен обрабатывать файлы, размер которых превышает размер ОЗУ. Честно говоря, я не понимаю, как применить классическую сортировку слиянием для своих нужд. Код, который я написал, может обрабатывать попарное последовательное чтение из файлов. Пример:
public static void merge(BufferedReader[] bfs) throws IOException {
File file = new File("out.txt");
try {
if (!file.createNewFile())
System.out.println("The file is already exists. Overwriting...");
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
FileWriter output = new FileWriter(file);
String str1 = bfs[0].readLine();
String str2 = bfs[1].readLine();
Long l1 = Long.parseLong(str1);
Long l2 = Long.parseLong(str2);
boolean trigger = true;
while (trigger) {
if (l1 <= l2) {
output.append(str1).append('\n');
if ((str1 = bfs[0].readLine()) != null) {
l1 = Long.parseLong(str1);
}
else {
l1 = null;
break;
}
}
else {
output.append(str2).append('\n');
if ((str2 = bfs[1].readLine()) != null) {
l2 = Long.parseLong(str2);
}
else {
l2 = null;
break;
}
}
}
if (l1 == null) {
while ((str2 = bfs[1].readLine()) != null) {
output.append(str2).append('\n');
}
}
if (l2 == null) {
while ((str1 = bfs[0].readLine()) != null) {
output.append(str1).append('\n');
}
}
output.close();
}
Я прав? Как я могу отсортировать по убыванию, когда чтение данных с жесткого диска последовательное? Я также нашел алгоритм слияния k-way с деревом, но вряд ли он имеет отношение к моей задаче.