Нет смысла в повторной сортировке после каждого чтения, так как вам действительно нужно только вставить новую запись. Используйте следующий алгоритм, это, вероятно, даст вам лучшую скорость. Это в основном развернутый цикл, а не самый красивый код.
set movies[0..4].rating to -1.
while more movies in stream:
read in next movie.
if movie.rating < movies[0].rating:
next while
if movie.rating < movies[1].rating:
movies[0] = movie
next while
if movie.rating < movies[2].rating:
movies[0] = movies[1]
movies[1] = movie
next while
if movie.rating < movies[3].rating:
movies[0] = movies[1]
movies[1] = movies[2]
movies[2] = movie
next while
if movie.rating < movies[4].rating:
movies[0] = movies[1]
movies[1] = movies[2]
movies[2] = movies[3]
movies[3] = movie
next while
movies[0] = movies[1]
movies[1] = movies[2]
movies[2] = movies[3]
movies[3] = movies[4]
movies[4] = movie
В конце у вас есть отсортированный список фильмов. Если их меньше 5, у других будет рейтинг -1, поэтому вы будете знать, что они недействительны. Предполагается, что рейтинг реального фильма равен нулю или больше, но вы можете изменить значения, если они не указаны.
Если вам нужно настроить его для более чем 5 фильмов, вы можете. Лучше всего было бы снова свернуть петлю. Однако в какой-то момент сортировка будет более эффективной, чем использование этого метода. Этот метод действительно хорош только для небольшого набора данных.