
Isnard_Oak
(usa Kalango)
Enviado em 09/11/2014 - 22:20h
Eu tenho que resolver o seguinte problema:
Entrada: um arquivo texto com N inteiros a1, a2, ... aN, N < 2^25.
Saída: um arquivo texto com os N inteiros da entrada ordenados.
Restrição 1: o seu executável nunca deverá usar mais do que 2Mb de memória RAM do recurso do sistema
Minha ideia: Criar uns 200 arquivos de textos, cada um com cerca de 160000 números ordenados, para poder gastar pouca memória. Depois disso, verifico os primeiros elementos dos 200 arquivos, vejo o menor e jogo no arquivo de texto final. Vou fazendo isso até completar o arquivo final com os N números iniciais.
Meu problema:
Estou criando os arquivos via
for(i=0;i<160000;i++) {fscanf(text,"%d",&p[i]);n=i;}
mergeSort(p,n);
FILE *text1=fopen("Lista1.txt","w");
for(i=0;i<160000;i++)fprintf(text1,"%d ",p[i]);
fclose(text1);
Como colocar essa estrutura dentro de um for que rodará 200 vezes para criação de 200 arquivos?
P.S. Ainda não sei exatamente como ordenarei os números dos 200 arquivos para o arquivo final. Se tiver uma sugestão ou ideia, agradecerei...
P.S. 2 O mergeSort() é um algoritmo de ordenação, mas isso vcs devem saber...