Я не считаю, что указано, что данные должны быть сброшены на fseek
, но когда данные фактически записаны на диск, они должны быть записаны в том положении, в котором был поток, когда была вызвана функция записи. Даже если данные все еще буферизованы, этот буфер не может быть записан в другую часть файла, когда он сбрасывается, даже если последует поиск.
Когда вы звоните Selection.sort(list)
в main
, кажется, что list
имеет длину 10000.
Каждый элемент по умолчанию равен нулю.
Итак, если вы прочитаете три слова, ваш список будет выглядеть следующим образом:
word1,word2,word3,null,null,null......null
Быстрый взлом, чтобы вам не нужно изменять размер массива - попробуйте сделать свой внутренний цикл в Selection::sort
:
for (int j = i + 1; j < n; j++) {
if (a[j] == null) {
break;
}
if (less(a[j], a[min]))
min = j;
}
Или - изменить размер массива перед обработкой.
Или - используйте ArrayList, чтобы помещать слова в массив и затем преобразовывать его в массив, если вам абсолютно необходимо использовать массив.