Imagine o seguinte problema: Dado um vetor com N números, imprima todos eles em ordem crescente, ou seja, do menor para o maior. Por exemplo, se a questão nos desse um vetor com os valores: {5, 3, 10, 2, 7}, a resposta correta do programa seria: 2, 3, 5, 7, 10.

Para resolvermos este problema, utilizaremos uma operação chamada de ordenação. Como você faria isso? Bom, a ideia mais comum e intuitiva  é: Primeiro encontrar o menor número do vetor. Depois, encontrar o segundo menor número, e assim sucessivamente, até termos todos os valores ordenados do menor, para o maior.

Uma maneira de ensinar o computador a fazer isso, em c++, é a seguinte:

#include <iostream>
using namespace std;
const inf = 1000000000, maxn = 10010;
int N, vetor[maxn];
bool usado[maxn]; // nesse vetor, guardaremos se já usamos ou não cada número do vetor original
int main()
{
cin >> N; // leio o N, ou seja, a quantidade de posições do vetor
for(int i = 1 ; i <= N ; i++)
{
cin >> vetor[i]; // leio cada um dos N números
}
for(int i = 1 ; i <= N ; i++) // para cada número a ser encontrado
{
// declaramos que o menor número é infinito, ou seja, um número bem grande
// veja a linha 6
int menor = inf;
int id_menor; // posição no vetor do menor número
for(int j = 1 ; j <= N ; j++) // percorro o vetor
{
if(usado[j] == 0 and vetor[j] < menor) // procurando o menor valor "disponível" do vetor
{
menor = vetor[j]; // o menor valor agora é o valor da posição atual do vetor
id_menor = j; // guardo que o índice de tal número é o índice do atual
}
}
usado[id_menor] = 1; // guardo que já usei essa posição
cout << menor << " "; // imprimo o menor valor encontrado
}
return 0;
}
view raw Ordenacao.cpp hosted with ❤ by GitHub

Neste código, utilizamos dois loops começando em 1 e finalizando em N, um dentro do outro. Por esta razão, o código não é tão rápido. Existe uma função pronta do c++ chamada sort, que ordena os valores em ordem crescente, com uma velocidade ainda maior.

Para podermos utilizar a função, devemos informar a posição inicial que queremos ordenar do vetor, seguida pela primeira posição que não queremos ordenar. Por exemplo, suponha que quiséssemos ordenar da posição 3 até a posição 7 do vetor. Nesse caso, chamamos a função assim: sort(3,8), pois 3 é a primeira posição que queremos ordenar e 8 é a primeira que não queremos.

Para ordenar os valores de um vetor v basta chamar a função da seguinte maneira: sort(v+ini, v+fim), onde ini representa a primeira posição que queremos ordenar crescentemente e fim a primeira que não queremos. No caso da primeira posição ser 0, basta escrever: sort(v, v+fim).

Um código que utiliza a função sort para resolver o nosso problema, é o seguinte:

#include <iostream>
#include <algorithm> //Biblioteca do sort
using namespace std;
int N, vetor[10010];
int main()
{
cin >> N; // leio a quantidade de posições do vetor
for(int i = 0 ; i < N ; i++)
{
cin >> vetor[i]; // recebo o valor de cada número
}
sort(vetor, vetor+N);
// ordeno, do menor para o maior, todos os números do vetor
// lembrando que a primeira posição do vetor é a 0
for(int i = 0 ; i < N ; i++)
{
cout << vetor[i] << " "; // por fim, imprimo cada valor do vetor já ordenado
}
return 0;
}
view raw Sort.cpp hosted with ❤ by GitHub