У меня есть файл с несколькими отсортированными строками. Теперь я хочу отсортировать все эти строки в одной объединенной строке в новом файле. Без загрузки всех номеров сразу.Линии Mergesort из файла .txt
Это часть моего файла:
12,86,280,304,350,359,371,391,405,548,
255,264,325,346,435,466,483,
39,114,214,298,317,377,428,438,575,
35,165,183,281,336,367,386,418,438,593,
44,77,97,117,122,156,251,415,533,
109,155,163,172,212,226,340,358,452,577,592,
33,74,91,204,256,307,357,388,534,552,554,570,
50,99,246,309,345,358,395,405,419,425,566,
Теперь я хочу, чтобы объединить рода тех, так я сначала нужно знать, сколько строк в файле есть. Затем мне нужно получить все первые элементы и сравнить их. Самый низкий я пишу в новый файл. Затем я должен получить второй номер из строки, которую я только что написал. И сравните их с первыми номерами других строк. Как мне это сделать. Я написал для ArrayLists слиянием:
//as long as there is unsorted data
while (listOfOutputs.size() > 0) {
//Set the lowest undefined
List<Integer> lowest = null;
for (List<Integer> list : listOfOutputs) {
//if the lowest is undefined, I'm the lowest
if (lowest == null) {
lowest = list;
//Else am I lower then the lowest? Then I'm the lowest
} else if (list.get(0) < lowest.get(0)) {
lowest = list;
}
}
//Finally the lowest is added to the sorted list and removed to from his own list.
assert lowest != null;
sortedList.add(lowest.remove(0));
//Is the size of the list which contained to lowest now 0, remove him from the listOfOutputs
if (lowest.size() == 0) listOfOutputs.remove(lowest);
}
Но я не знаю, как переписать это в тот, который сортирует мой файл. Как это сделать, не загружая их в списки.
Sven
Можно ли просто прочитать каждую строку, разобрав каждую строку при чтении и добавив каждое разобранное целое число в список и, наконец, отсортировать весь этот список за один раз в конце? – jarmod
Ваши данные слишком велики, чтобы вписаться в память? Вот почему вы не хотите просто загружать все данные в один массив и сортировать его? –