A função ordena
deverá ordenar em ordem alfabética os elementos dentro do intervalo inicio
até termino
passados como parâmetros.
Para isso, dentro da função, é criado um array auxiliar resultado
com tamanho suficiente apenas para os elementos a serem trabalhados.
Ao final da função ordena
, os elementos de resultado
são intercalados ao array original nomes
, mudando a ordem dos elementos deste mesmo array (ordem alfabética).
Todas as vezes que mando imprimir o array, só tenho como resposta o array original.
Devo estar me equivocando em algum detalhe que não consigo perceber. Por isso, peço ajuda.
Detalhe: se eu fizer ordena(nomes, 0, nomes.length)
a função funciona normalmente. Porém, se eu informar outro intervalo, ela aparenta não fazer o que se é proposto.
Segue o código abaixo:
public class IntercalaString {
public static void main(String[] args) {
String[] nomes = { "Andressa", "Camila", "Enzo", "Fernando", "Maria", "Alberto", "Jonas", "Junior", "Paloma",
"Paulo" };
ordena(nomes, 1, 7);
}
private static void imprime(String[] nomes) {
for (String nome : nomes) {
System.out.println(nome);
}
}
private static void ordena(String[] nomes, int inicio, int termino) {
int tamanho = (termino - inicio);
int meio = tamanho / 2;
int atual1 = inicio;
int atual2 = meio;
int atual = 0;
String[] resultado = new String[tamanho];
while (atual1 < meio && atual2 < termino) {
String nome1 = nomes[atual1];
String nome2 = nomes[atual2];
if (nome1.compareTo(nome2) < 0) {
resultado[atual] = nome1;
atual1++;
} else {
resultado[atual] = nome2;
atual2++;
}
atual++;
}
while (atual1 < meio) {
resultado[atual] = nomes[atual1];
atual1++;
atual++;
}
while (atual2 < termino) {
resultado[atual] = nomes[atual2];
atual2++;
atual++;
}
for (int contador = 0; contador < atual; contador++) {
nomes[inicio + contador] = resultado[contador];
}
imprime(nomes);
}
}