Java: Ordene array inteiro sem usar Arrays.sort ()
Esta é a instrução em um dos exercícios em nossa classe Java. Antes de mais nada, gostaria de dizer que "faço minha lição de casa" e não estou apenas sendo preguiçoso pedindo a alguém no Stack Overflow para responder a isso por mim. Este item específico tem sido o meu problema de todos os outros exercícios porque eu tenho lutado para encontrar o 'algoritmo perfeito' para isso.
Escreva o programa JAVA que irá inserir 10 valores inteiros e exibir em ordem crescente ou decrescente. Nota: Arrays.sort () não é permitido.
Este é o código que eu criei, funciona, mas tem uma falha óbvia. Se eu inserir o mesmo valor duas vezes ou mais, por exemplo:
5, 5, 5, 4, 6, 7, 3, 2, 8, 10
Apenas um dos três 5s inseridos seria contado e incluído na saída. A saída que obtenho (para a ordem crescente) é:
2 3 4 5 0 0 6 7 8 10.
import java.util.Scanner;
public class Exer3AscDesc
{
public static void main(String args[])
{
Scanner scan = new Scanner(System.in);
int tenNums[]=new int[10], orderedNums[]=new int[10];
int greater;
String choice;
//get input
System.out.println("Enter 10 integers : ");
for (int i=0;i<tenNums.length;i++)
{
System.out.print(i+1+"=> ");
tenNums[i] = scan.nextInt();
}
System.out.println();
//imperfect number ordering algorithm
for(int indexL=0;indexL<tenNums.length;indexL++)
{
greater=0;
for(int indexR=0;indexR<tenNums.length;indexR++)
{
if(tenNums[indexL]>tenNums[indexR])
{
greater++;
}
}
orderedNums[greater]=tenNums[indexL];
}
//ask if ascending or descending
System.out.print("Display order :\nA - Ascending\nD - Descending\nEnter your choice : ");
choice = scan.next();
//output the numbers based on choice
if(choice.equalsIgnoreCase("a"))
{
for(greater=0;greater<orderedNums.length;greater++)
{
System.out.print(orderedNums[greater]+" ");
}
}
else if(choice.equalsIgnoreCase("d"))
{
for(greater=9;greater>-1;greater--)
{
System.out.print(orderedNums[greater]+" ");
}
}
}
}