Реализация сортировки слиянием для нескольких текстовых файлов

Мне нужна программа, реализующая объединение нескольких файлов с уже отсортированными по возрастанию данными в один файл. Программа должна содержать числа или строки в порядке возрастания и убывания, например: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 с деревом, но вряд ли он имеет отношение к моей задаче.

0 ответов

Другие вопросы по тегам