1) Хорошую скорость дает QuickSelect, см. туда http://ndevilla.free.fr/median/median.pdf
2) Если данные приходят по одному, и надо делать "скользящую медиану", то держите связанный список двунаправленный плюс циркулярный буфер. Связанный список изначально и всегда сортирован, новое данное втыкаете сразу в его место. Ищете результат в том же проходе, что и данное втыкаете. А циркулярный буфер служит для запоминания ссылки на все элементы списка в порядке их поступления, чтобы быстро выкинуть из списка самый старый элемент, которому на пенсию пора. Я тут про енто уже писал.