Que tal algo como um procedimento de binning? Suponha (para fins ilustrativos) que você saiba que os valores estão entre 1 e 1 milhão. Configure N compartimentos, do tamanho S. Portanto, se S = 10000, você terá 100 compartimentos, correspondentes aos valores [1: 10000, 10001: 20000, ..., 990001: 1000000]
Em seguida, percorra os valores. Em vez de armazenar cada valor, basta incrementar o contador na bandeja apropriada. Usando o ponto médio de cada compartimento como uma estimativa, é possível fazer uma aproximação razoável da mediana. Você pode dimensioná-lo para uma resolução tão fina ou grossa quanto desejar, alterando o tamanho dos compartimentos. Você é limitado apenas pela quantidade de memória que possui.
Como você não sabe o tamanho dos seus valores, basta escolher um tamanho de compartimento grande o suficiente para que não fique sem memória, usando alguns cálculos rápidos do verso do envelope. Você também pode armazenar as caixas escassamente, de forma que você adicione uma bandeja apenas se ela contiver um valor.
Editar:
O link ryfm fornece um exemplo de como fazer isso, com a etapa adicional de usar as porcentagens acumuladas para estimar com mais precisão o ponto na bandeja mediana, em vez de apenas usar pontos médios. Esta é uma boa melhoria.