Introdução
Na prática, será que nós só estamos interessados em saber o valor mais barato ou o mais caro? Ou também estamos interessados em descobrir o grupo dos produtos mais baratos, o grupo dos mais caros, o grupo dos que fizeram mais pontos. Às vezes queremos saber duas informações, por exemplo: quem ganhou com mais pontos e quem perdeu com menos pontos. Porém, é possível que uma busca nos traga inúmeros resultados, 1 milhão de resultados.
Como quando queremos descobrir quais são os 10 carros mais baratos ou os cinco primeiros times que irão para a próxima fase da competição. Ou quando queremos informações sobre um grupo com vários produtos. Como nós podemos alterar o nosso processo para marcar quais são os dois carros mais baratos?
Qual é o processo que faremos ao analisar cada um dos elementos, para descobrir quais dos produtos são o maisBarato e o segundomaisBarato ? Para descobrir qual é o maisBarato , nós vamos precisar de uma variável que armazene o produto com o menor preço naquele momento.
Iremos precisar também ter registrado (mentalmente ou anotado num papel) qual é o segundoMaisBarato . Então eu vou precisar de outra variável e assim, anotar o primeiro e o segundo mais barato.
Analisaremos cada elemento e identificaremos "esse é o mais barato" ou "esse é o segundo mais barato agora". Para isso, teremos que usar o if várias vezes.
Sempre que quisermos saber se a Lamborghini é o carro mais barato... Ou o segundo, talvez, o terceiro carro mais barato, teremos sempre que passar pelo for . Em consequência, será preciso utilizar o if várias vezes se quisermos criar um grupo dos produtos mais baratos.
Por exemplo, se desejarmos identificar o grupo dos cinco carros com o menor preço, vamos precisar utilizar if cinco vezes. O mesmo irá acontecer se quisermos descobrir quais são os 10 carros mais baratos. Para encontrar a resposta, vamos precisar usar 10 if s. Imagine o tamanho do nosso código se quisermos descobrir os 50 produtos mais baratos de uma lista.
Não parece ser a melhor solução colocar inúmeras variáveis para verificar se o produto é o primeiro, o segundo, o terceiro, quarto ou quinto mais barato. Não parece a melhor solução usar infinitos if s para identificar os elementos com o menor valor.
Imagine que para uma lista com muitos carros, como podemos responder as perguntas abaixo:
Quem são os n menores?
Quem são os n maiores?
Onde n pode ser qualquer valor inteiro maior de 1.
A Importância da ordenação
Continuamos com a questão de como descobrir quais são os produtos mais baratos e os mais caros, os times ou competidores que irão para a próxima fase da competição, os n elementos mais ou menos, maiores ou menores. Como responder a pergunta sem colocar infinitas variáveis e ifs no meu código? A resposta é: usando ordenação.
Agora fica simples responder a perguntas como:
Quem são os dois menores?
Quem são os dois maiores?
Quem são os três menores?
Quem são os cinco maiores?
Basta listar os elementos do conjunto ordenado.
Quem são os dois menores? Os dois primeiros elementos do conjunto.
Quem são os dois maiores? Os dois últimos elementos do conjunto.
Quem são os três menores? Os três primeiros elementos do conjunto.
Quem são os cinco maiores? Os cinco últimos elementos do conjunto.
Perguntas como:
Quais são os 500 menores?
Quais são os 500 maiores?
precisariam ser respondidas com 500 if s no nosso código. Porém, basta que os produtos estejam ordenados para que encontremos a resposta rapidamente
Outro exemplo seria se quiséssemos encontrar o produto mais barato. Caso nossa lista esteja em ordem, sabemos que o elemento com o menor preço será aquele que estiver na primeira posição. Quando o array está ordenado (uma coleção de itens ordenados) é simples encontrar quais são os elementos maiores e menores. O segredo está na ordenação dos itens.
No exemplo dos carros, nós ordenamos os elementos manualmente. Movemos os produtos e conseguimos colocá-los em novas posições.
Como conseguimos ordenar um conjunto?
Este é o desafio que iremos resolver: como ordenar nossas listas de maneira inteligente e rápida?
Outras questões:
Como criar uma ordem para cartas de baralho, provas de alunos ou resultados de uma eleição?
Como podemos ordenar itens e, depois, aperfeiçoar a ordenação?
Qual o mais barato?
Qual carro está posicionado no meio da lista?
Quando as coisas estão ordenadas, o processo de busca se torna mais rápido. Essa é a grande sacada da ordenação: ela nos permite resolver tarefas do cotidiano quase imediatamente.
O nosso desafio será descobrir como criar uma ordem para os produtos que estão desordenados.