Просто вставьте их в большой массив.
Когда придет время отбирать и сортировать, начните с сортировки. Сделайте вставку сортировки. Это верно - ничего умного, просто сортировка вставок.
После сортировки просмотрите отсортированный массив, и для каждого объекта примите решение об отбраковке, а затем немедленно выведите объект, если он не отбракован.
Это примерно так же эффективно, как и память. Это также должно потребовать очень небольшого количества вычислений: нет никакой бухгалтерии для обновлений между проходами отбора / сортировки, и сортировка будет дешевой - потому что сортировка вставкой является адаптивной, и для почти отсортированного массива, подобного этому, это будет почти O (n) , Единственное, что он не делает, - это локальность кэша: будет два отдельных прохода по массиву для сортировки и отбраковки / вывода.
Если вам требуется больше сообразительности, то вместо сортировки вставкой вы можете использовать другую адаптивную сортировку на месте, которая работает быстрее. Timsort и smoothsort являются хорошими кандидатами; и то, и другое абсолютно ужасно для реализации.
Большой альтернативой этому является сортировка только необработанных объектов с использованием вторичного, временного, списка таких объектов, которые вы сортируете (или храните в двоичном дереве или как угодно). Но дело в том, что если ключи не сильно меняются, то выигрыш, который вы получите от использования адаптивной сортировки на почти отсортированном массиве, (я считаю!) Перевесит выигрыш, который вы получите от сортировки меньшего набора данных. Это O (n) против O (n log n).