Медиана медиан, вероятно, не сильно помогает в поиске ближайших соседей, по крайней мере, для больших n. Да, каждый столбец из 5 разделен вокруг его медианы, но этого недостаточно для того, чтобы решить проблему.
Я бы просто рассматривал медиану как промежуточный результат, а ближайших соседей - как проблему с приоритетной очередью ...
Получив медиану от медианы, запомните ее значение.
Запустите алгоритм heapify для всех ваших данных - см. Wikipedia - Binary Heap . При сравнении основывайте результат на разнице относительно сохраненного медианного значения. Предметы с наивысшим приоритетом - это предметы с самым низким ABS (значение - медиана). Это занимает O (n).
Первый элемент в массиве теперь является медианой (или ее дубликатом), а массив имеет структуру кучи. Используйте алгоритм извлечения кучи, чтобы вытащить столько ближайших соседей, сколько вам нужно. Это O (k log n) для k ближайших соседей.
До тех пор, пока k является константой, вы получаете O (n) медиан медиан, O (n) heapify и O (log n) извлечение, что дает O (n) в целом.