Это хорошо известный алгоритм выбора. см http://en.wikipedia.org/wiki/Selection_algorithm.
Мне нужно, чтобы найти медианное значение набора значений вокселей 3x3x3. Поскольку объем состоит из миллиарда вокселей, а алгоритм рекурсивный, лучше быть немного быстрее.
В целом можно ожидать, что значения относительно близки.
Самый быстрый из известных алгоритмов, которые я когда-либо пробовал, использует функцию секционирования быстрой сортировки. Я хотел бы знать, есть ли более быстрый.
Я «изобрел» 20% более быстрый, используя две кучи, но ожидал еще более быстрый, используя хэш. Прежде чем реализовать это, я хотел бы знать, существует ли уже быстрое быстрое решение.
Тот факт, что я использую числа с плавающей запятой, не должен иметь значения, поскольку их можно рассматривать как целое число без знака после инвертирования знакового бита. Заказ будет сохранен.
РЕДАКТИРОВАТЬ: тест и исходный код перенесены в отдельный ответ, как это было предложено
Дэви Лэндман. Ниже приведен ответ от chmike.
РЕДАКТИРОВАТЬ : На сегодняшний день Boojum ссылается на наиболее эффективный алгоритм как ссылку на статью Быстрая медиана и двусторонняя фильтрация , которая теперь является ответом на этот вопрос. Первая разумная идея этого метода - использовать радикальную сортировку, вторая - объединить медианный поиск соседних пикселей, которые совместно используют много пикселей.