O documento discute algoritmos de ordenação de dados, incluindo BubbleSort, Selection Sort e Insertion Sort. Explica como cada algoritmo funciona através de exemplos passo a passo e analisa suas complexidades de tempo.
2. 2
Ordenação é o ato de se
colocar os elementos de uma
sequência de informações, ou
dados, em uma ordem
predefinida.
Algoritmos a serem vistos:
BubbleSort
Seleção
Inserção
MergeSort
QuickSort
Métodos Simples
Métodos Eficientes
Rápidos (menos da metade do tempo
que os métodos simples)
3. 3
Consiste em trocar o menor elemento de um
vetor com o elemento posicionado no início
do vetor, depois o segundo menor elemento
para a segunda posição, e assim
sucessivamente com os (n - 1) elementos
restantes, até os últimos dois elementos.
Exemplo: Considere o seguinte vetor:
13 7 5 1 4v
0 1 2 3 4
Verifico a primeira posição do vetor
Procuro qual o elemento menor nas posições superiores
Se existe menor que o atual faço a troca
4. 4
Consiste em trocar o menor elemento de um
vetor com o elemento posicionado no início
do vetor, depois o segundo menor elemento
para a segunda posição, e assim
sucessivamente com os (n - 1) elementos
restantes, até os últimos dois elementos.
Exemplo: Considere o seguinte vetor:
13 7 5 1 4v
0 1 2 3 4
1 7 5 13 4 Passo 1 → troca (1<13)
Verifico a segunda posição do vetor
Procuro qual o elemento menor nas posições superiores
Se existe menor que o atual faço a troca
5. 5
Consiste em trocar o menor elemento de um
vetor com o elemento posicionado no início
do vetor, depois o segundo menor elemento
para a segunda posição, e assim
sucessivamente com os (n - 1) elementos
restantes, até os últimos dois elementos.
Exemplo: Considere o seguinte vetor:
13 7 5 1 4v
0 1 2 3 4
1 7 5 13 4
1 4 5 13 7
Passo 1 → troca
Passo 2 → troca (2<7)
Verifico a terceira posição do vetor
Procuro qual o elemento menor nas posições superiores
Se existe menor que o atual faço a troca
6. 6
Consiste em trocar o menor elemento de um
vetor com o elemento posicionado no início
do vetor, depois o segundo menor elemento
para a segunda posição, e assim
sucessivamente com os (n - 1) elementos
restantes, até os últimos dois elementos.
Exemplo: Considere o seguinte vetor:
13 7 5 1 4v
0 1 2 3 4
1 7 5 13 4
1 4 5 13 7
1 4 5 13 7
Passo 1 → troca
Passo 2 → troca
Passo 3 → não troca
7. 7
Consiste em trocar o menor elemento de um
vetor com o elemento posicionado no início
do vetor, depois o segundo menor elemento
para a segunda posição, e assim
sucessivamente com os (n - 1) elementos
restantes, até os últimos dois elementos.
Exemplo: Considere o seguinte vetor:
13 7 5 1 4v
0 1 2 3 4
1 7 5 13 4
1 4 5 13 7
1 4 5 13 7
1 4 5 7 13
Passo 1 → troca
Passo 2 → troca
Passo 3 → não troca
Passo 4 → troca (7 < 13)
8. public void selecao() {
int min;
for (int i = 0; i < n-1; i++) {
min = i;
for (int j = i+1; j < n; j++)
if (v[j] < v[min])
min = j;
troca(i, min);
}
}
8
private void troca(int um, int dois) {
long temp = v[um];
v[um] = v[dois];
v[dois] = temp;
}
min é a posição do
elemento mínimo
laço responsável pela
varredura de n–1 vezes
Método responsável
pela troca de
elementos de um
vetor do tipo long.
min recebe a posição i
Procura nas posições
superiores a i o
elemento menor que
min
caso encontre elemento
menor que min:
variável min recebe a
posição desse
elemento
9. 9
Vantagens:
Desvantagens:
Ele é um algoritmo simples de ser
implementado em comparação aos demais
Ele é um dos mais lentos para vetores de tamanhos grandes
Ele é mais veloz que o bubblesort na ordenação de vetores de
tamanhos pequenos (Inserção é ainda mais veloz)
Ele faz sempre n2 comparações, independente do vetor
está ordenado ou não.
10. 10
Inicialmente, ela ordena os dois primeiros
elementos do vetor, em seguida, o
algoritmo insere o terceiro elemento na sua
posição ordenada com relação aos dois
primeiros elementos, e assim por diante até
que todo o vetor esteja ordenado.
Exemplo 1: Considere o seguinte vetor:
12. 49 67 33 96 21 33 58 7449
49 67 33 96 21 33 58 74V
Passo: Primeiro elemento é passado
0 1 2 3 4 5 6 7
Exemplo: Considere o seguinte vetor:
Variável marcada 1
13. 49 67 33 96 21 33 58 7449
49 67
49 67 33 96 21 33 58 74V
Passo: Segundo elemento é passado em sua posição ordenada e assim por
diante...
0 1 2 3 4 5 6 7
Exemplo: Considere o seguinte vetor:
Variável marcada 2
20. public void insercao() {
int i, j;
long temp;
for (i=1; i < n; i++) {
temp = v[i]; // variável marcada
j = i;
while ((j > 0) && (v[j-1] > temp))
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = temp;
}
}
20
21. public void insercao() {
int i, j;
long temp;
for (i=1; i < n; i++) {
temp = v[i]; // variável marcada
j = i;
while ((j > 0) && (v[j-1] > temp))
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = temp;
}
}
21
laço responsável pela
varredura do vetor
temp recebe o
conteúdo do item atual
(posição i)
Laço responsável
pela movimentação
dos outros itens em
suas novas posições
(ordenada)
Inserção do item atual
na sua posição
ordenada
conteúdo do item
atual (variável temp)
22. 22
Ordenação por
seleção
BubbleSort Ordenação por
inserção
Percorre todos
elementos e ajusta
no final
Varrendo e
apanhando itens
Selecionando
entre os próximos
itens qual o
menorUsa um método simples
de ordenação por troca,
porém sua eficiência é a
menor entre os três.
Admite melhoramentos, por
isso, é muito usado como
base para construção de
métodos mais elaborados.
Eficiente para vetores com
pequena quantidade de
dados
Ineficiente para vetores com
grande quantidades de
dados
É o melhor método para se
usar quando o conteúdo
está quase ordenado.
Apresenta o melhor
comportamento entre os
três quanto ao número
de movimentos.
Portanto, é o ideal para
vetores com grande
quantidade de dados.
24. 24
Demonstra como tempos de execução
são afetados pelo numero de itens
Resumo do tempo de execução
dos algoritmos:
Média Pior Melhor
Bolha O(n2) O(n2) O(n)
Seleção O(n2) O(n2) O(n2)
Inserção O(n2) O(n2) O(n)
25. 25
Os algoritmos de ordenação vistos adotam um vetor
como a estrutura de armazenamento de dados;
Ordenar envolve comparar as chaves de itens de
dados no vetor e mover os itens até que eles estejam
na ordem classificada;
Todos os algoritmos vistos até essa aula executam
em tempo O(n2). Entretanto alguns podem ser mais
rápidos que os outros;
A ordenação pelo método da bolha é a menos
eficiente, porém o algoritmo mais simples;/
A ordenação por inserção é a mais usada das
ordenações com tempo O(n2);
Nenhuma das ordenações vistas até essa aula requer
mais do que uma variável temporária, além do vetor
original.
26. 26
2- O algoritmo pelo método da bolha alterna-se entre:
a. Comparar e trocar
b. Mover e Copiar
c. Mover e Comparar
d. Copiar e Comparar
1- Algoritmos de ordenação por computador são mais
limitados que humanos no sentido de que:
a. Humanos são melhores em inventar novos
algoritmos.
b. Computadores podem lidar apenas com uma
quantidade fixa de dados
c. Humanos sabem o que ordenar, ao que
computadores precisam ser informados.
d. Computadores podem comparar apenas duas
coisas de cada vez
27. 27
3- Verdadeiro ou Falso: Se houver n itens, a ordenação
por Seleção fara exatamente n*n comparações.
4- Na ordenação por Inserção, a variável marcada
descrita na aula corresponde a qual variável no
algoritmo?
a. i
b. j
c. temp
d. v[j]
28. 28
Escrever programas para resolver os projetos de programação ajuda a
solidificar sua compreensão do material e demonstra como aplicar os
conceitos da aula.
5- Considere que a ordenação para n inteiros números
leve t segundos.
Calcule o tempo de ordenação para cem, mil, dez mil e
cem mil elementos para todos os algoritmos de
ordenação vistos: bubblesort, seleção e inserção.
Imprima na tela da seguinte forma:
Obtenha valores aleatórios entre 0 e 500 para o vetor
desordenado.
29. 29
import java.util.Random;
public class Aleatorios {
public static void main(String[] args) {
Random gerador = new Random();
//imprime sequência de 10 números inteiros aleatórios
for (int i = 0; i < 10; i++)
System.out.println(gerador.nextInt(101));
/* Como o parâmetro do método é 101, os valores
gerados serão entre 0 e 100 */
}
}
Dica 1: Programa exemplo de como obter valores
aleatórios entre 0 e 100.
Dica 2: No desenvolvimento do programa não se esqueça
de manter uma cópia do vetor desordenado gerado.
Exemplo: for(i=0; i<n; i++) copia[i]=v[i];
Ordene somente a copia, não o vetor v.
30. 30
Dica 3: Programa exemplo de como calcular o tempo em
milissegundos em Java.
public class Tempo {
public static void main(String[] args) {
long tempoInicio;
// inicia contagem do tempo
tempoInicio= System.currentTimeMillis();
// imprime sequência de 0 a 999
for (int i = 0; i < 1000; i++)
System.out.print(i + " ");
/* finaliza contagem do tempo e imprime na tela o tempo
gasto para impressão da sequencia de 0 a 999 */
System.out.println("nTempo Total: " +
(System.currentTimeMillis()-tempoInicio) + " milisegundos");
}
}
Notas do Editor
O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".