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