0
respostas

Onde estou errando?

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);
    }
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software