Gente, estou tentando criar um mergesort, sendo que imprima passo a passo em um arquivo, mas só imprimi o final já ordenado! Segue o código
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class mergesort {
static void gravar(int[] v, String saida) throws IOException{
FileWriter arq = new FileWriter(saida);
PrintWriter gravarArq = new PrintWriter(arq);
int n = v.length;
for (int i=0;i<n-1;i++){
gravarArq.printf("%d"+" ",v[i]);
gravarArq.printf("\n", saida);
}
arq.close();
}
public static int[] mergeSort(int array[], String arquivo) throws IOException
{
if(array.length > 1)
{
int elementsInA1 = array.length/2;
int elementsInA2 = elementsInA1;
if((array.length % 2) == 1)
elementsInA2 += 1;
int arr1[] = new int[elementsInA1];
int arr2[] = new int[elementsInA2];
for(int i = 0; i < elementsInA1; i++)
arr1[i] = array[i];
for(int i = elementsInA1; i < elementsInA1 + elementsInA2; i++)
arr2[i - elementsInA1] = array[i];
arr1 = mergeSort(arr1, arquivo);
gravar(arr1, arquivo);
arr2 = mergeSort(arr2, arquivo);
gravar(arr2, arquivo);
int i = 0, j = 0, k = 0;
while(arr1.length != j && arr2.length != k)
{
if(arr1[j] > arr2[k])
{
array[i] = arr1[j];
i++;
j++;
}
else
{
array[i] = arr2[k];
i++;
k++;
}
}
while(arr1.length != j)
{
array[i] = arr1[j];
i++;
j++;
}
while(arr2.length != k)
{
array[i] = arr2[k];
i++;
k++;
}
}
gravar(array,arquivo);
return array;
}
public static void main(String[] args) {
System.out.printf("\nConteúdo do arquivo texto:\n");
try {
FileReader arq = new FileReader(args[0]);
BufferedReader lerArq = new BufferedReader(arq);
String linha = lerArq.readLine(); // lê a primeira linha
// a variável "linha" recebe o valor "null" quando o processo
// de repetição atingir o final do arquivo texto
String[] c = linha.split(" ");
//Convertendo de String para int
int[] valoresInt = new int[c.length];
for (int i = 1; i < c.length; i++) {
valoresInt[i] = Integer.parseInt(c[i]);
}
// int tam = valoresInt.length;
mergeSort(valoresInt, args[1]);
while (linha != null) {
System.out.printf("%s\n", linha);
linha = lerArq.readLine(); // lê da segunda até a última linha
}
arq.close();
} catch (IOException e) {
System.err.printf("Erro na abertura do arquivo: %s.\n",
e.getMessage());
}
System.out.println();
}
}