SlideShare uma empresa Scribd logo
CENTRO UNIVERSITÁRIO CARIOCA
Curso de Graduação em Ciência da Computação
Sandro Marcelo Arpi
Igor Cavalcante de Souza
Victor Hugo Mendes Alves
Métodos de Pesquisa e Ordenação
Seleção Direta (Selection Sort)
Rio de Janeiro
2014
Página | 2
Sumário
Definição .....................................................................................................................3
Algoritmo em Pascal de ordenação por seleção (selection sort).................................4
Detalhamento do Algoritmo.........................................................................................5
Algoritmo em Pascal de ordenação Bubble Sort.........................................................7
Algoritmo de ordenação por inserção (Insertion Sort).................................................8
Exemplos.....................................................................................................................9
Aplicabilidade ............................................................................................................10
Comparando com outros métodos de ordenação .....................................................10
Conclusão .................................................................................................................12
Bibliografia:................................................................................................................13
Página | 3
Definição
Ordenação por Seleção (Selection Sort)
Ordenação é o processo de arranjar um conjunto de informações semelhantes em
uma ordem crescente ou decrescente. Especificamente, dada uma lista ordenada i
de n elementos, então: i1 <= i2 <= ... <= in.
É também um requisito para a maioria das aplicações, sejam elas locais ou web. É
necessário ordenar para que possa se ter acesso de forma mais fácil à informação
desejada.
Os métodos de ordenação são classificados em dois grandes grupos. Se o arquivo a
ser ordenado cabe todo na memória principal, então o método de ordenação é
chamado de ordenação interna. Neste caso o número de registros a ser ordenado é
pequeno o bastante para caber em um array do Pascal. Se o arquivo a ser ordenado
não cabe na memória principal e, por isso, tem que ser armazenado em disco, então
o método de ordenação é chamado de ordenação externa. A principal diferença
entre os dois métodos é que, em um método de ordenação interna, qualquer registro
pode ser imediatamente acessado, enquanto, em um método de ordenação externa,
os registros são acessados sequencialmente ou em grandes blocos.
Existem alguns algoritmos de ordenação, como o bubble sort, quick sort, merge sort,
heap sort, inserção direta ou insertion sort e seleção direta ou selection sort.
O método de ordenação por seleção caracteriza-se por procurar, a cada iteração, a
chave de menor (ou maior) valor do vetor e colocá-la na sua posição definitiva
correta, qual seja, no início (ou no final) do vetor, por troca com a que ocupa aquela
posição. O vetor a ser ordenado passa a ter um elemento a menos para ser usado
nas comparações. O mesmo processo é repetido para a parte restante do vetor, até
que este fique reduzido a um único elemento, quando então estará ordenado. Os
métodos de ordenação diferenciam-se uns dos outros, pelo critério utilizado para
Página | 4
selecionar, a cada iteração, a chave de menor (ou maior) valor. Os algoritmos de
ordenação por seleção utilizam uma pesquisa sequencial
Algoritmo em Pascal de ordenação por seleção (selection sort)
Program SelectionSort ;
var
x: array[1..10] of integer;
i,j,eleito,menor,posi: integer;
Begin
for i:=1 to 10 do
begin
write('Digite o ',i,' numero: ');
readln(x[i]);
end;
for i:=1 to 9 do
begin
eleito:= x[i];
menor:= x[i+1];
posi:= i+1;
for j:=i+1 to 10 do
if (x[j] < menor) then
begin
menor:= x[j];
posi:= j;
end;
if (menor < eleito) then
begin
x[i]:= x[posi];
x[posi]:= eleito;
end;
end;
writeln();
for i:=1 to 10 do
writeln(i,' numero: ', x[i]);
End.
Página | 5
Detalhamento do Algoritmo
Como funciona o método de ordenação por seleção direta?
Bem, pegamos cada elemento do vetor e comparamos com os demais elementos,
Ao encontrarmos o menor (ou maior) valor, efetuamos a troca de posições entre
eles, ou seja:
1° criamos um for com um índice de 1 até n para preencher o vetor
for i:=1 to 10 do
begin
write('Digite o ',i,' numero: ');
readln(x[i]);
end;
2° criamos outro for para compararmos os elementos da posição (índice) 1 até a
posição n-1 com as demais posições do vetor
3° pegamos o elemento do índice do vetor e separamos (no caso do algoritmo
abaixo, consideramos ele como o eleito)
4° atribuímos o valor na variável “menor”, do índice + 1
5° variável para a troca de posição recebe índice + 1
for i:=1 to 9 do
begin
eleito:= x[i];
menor:= x[i+1];
posi:= i+1;
6° Após atribuir valores para as variáveis que vão fazer com que a comparação e a
troca de posição aconteçam, executaremos outro for começando do índice + 1 (que
será atribuído à variável j) até n, para achar o menor valor entre os elementos que
estão a direita do eleito.
7° para acharmos o menor valor, teremos que ter uma condição dentro desse for,
para que haja a comparação entre os elementos e dessa comparação se encontre o
menor valor.
8° após encontrarmos esse valor, atribuímos ele a variável “menor” e informamos
qual a posição dele no vetor.
Página | 6
for j:=i+1 to 10 do
if (x[j] < menor) then
begin
menor:= x[j];
posi:= j;
end;
9° finalmente o comparamos com o valor que estava reservado na variável “eleito”, e
se esse valor for menor que o valor do eleito, efetuamos a troca de posições
10° ao final da execução, imprimimos o vetor ordenado pelo método de ordenação
por seleção direta.
if (menor < eleito) then
begin
x[i]:= x[posi];
x[posi]:= eleito;
end;
end;
writeln();
for i:=1 to 10 do
writeln(i,' numero: ', x[i]);
End.
Resumindo fica assim:
 Procurar o menor elemento e trocar com o elemento na primeira posição.
 Procurar o segundo menor elemento e trocar com o elemento na segunda
posição.
 Proceder assim até a ordenação estar completa.
Página | 7
Algoritmo em Pascal de ordenação Bubble Sort
Program BubbleSort ;
var
x: array[1..10] of integer;
n,i,aux: integer;
Begin
for i:=1 to 10 do
begin
write('Digite o ',i,' numero: ');
readln(x[i]);
end;
for n:=1 to 10 do
for i:=1 to 9 do
if (x[i] > x[i+1]) then
begin
aux:= x[i];
x[i]:= x[i+1];
x[i+1]:= aux;
end;
writeln();
for i:=1 to 10 do
writeln(i, ' numero: ', x[i]);
End.
Página | 8
Algoritmo de ordenação por inserção (Insertion Sort)
Program InsertionSort ;
var
x: array[1..10] of integer;
i,j,eleito: integer;
Begin
for i:=1 to 10 do
begin
write('Digite o ',i,' numero: ');
readln(x[i]);
end;
for i:=2 to 10 do
begin
eleito:= x[i];
j:= i-1;
while (j>=1) and (x[j]>eleito) do
begin
x[j+1]:= x[j];
j:= j-1;
end;
x[j+1]:= eleito;
end;
writeln();
for i:=1 to 10 do
writeln(i,' numero: ', x[i]);
End.
Página | 9
Exemplos
C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 T
14 35 26 7 76 9 44 34 12 3 2 5 89 57 14 19 1/10
13 2 26 7 76 9 44 34 12 3 35 5 89 57 14 19 2/9
12 2 3 7 76 9 44 34 12 26 35 5 89 57 14 19 3/11
11 2 3 5 76 9 44 34 12 26 35 7 89 57 14 19 4/11
10 2 3 5 7 9 44 34 12 26 25 76 89 57 14 19
9 2 3 5 7 9 44 34 12 26 25 76 89 57 14 19 6/8
8 2 3 5 7 9 12 34 44 26 25 76 89 57 14 19 7/14
7 2 3 5 7 9 12 14 44 26 25 76 89 57 34 19 8/15
6 2 3 5 7 9 12 14 19 26 25 76 89 57 34 44 9/10
5 2 3 5 7 9 12 14 19 25 26 76 89 57 34 44
4 2 3 5 7 9 12 14 19 25 26 76 89 57 34 44 11/14
3 2 3 5 7 9 12 14 19 25 26 34 89 57 76 44 12/15
2 2 3 5 7 9 12 14 19 25 26 34 44 57 76 89
1 2 3 5 7 9 12 14 19 25 26 34 44 57 76 89
C=105 2 3 5 7 9 12 14 19 25 26 34 44 57 76 89 T=10
Nesse exemplo, em azul são as posições do vetor (em muitas linguagens ele
começa na posição 0 (zero)). Na coluna C, temos a quantidade de comparações. Na
coluna T, temos as trocas, e quais posições foram trocadas.
Página | 10
Aplicabilidade
É um algoritmo de simples implementação. Pelo fato do método varrer todas as
posições de uma lista repetidamente, sua melhor aplicabilidade é em pequenos
conjuntos de dados.
Comparando com outros métodos de ordenação
Seleção Direta
Prós:
Por ser um algoritmo de ordenação de local, não precisa de armazenamento
temporário além do necessário para guardar a lista original. Pouco uso de memória.
Contras:
A quantidade de comparações efetuadas é constante para um dado n, ou seja, não
depende do arranjo prévio das chaves. Mesmo que os itens estejam ordenados, o
algoritmo fará todo o processo item a item. Por isso baixa eficiência em listas
grandes
Já o número de trocas de itens mínimos durante a busca da menor chave em cada
iteração não é constante, pois depende da ordem em que as chaves se apresentam.
Este fato vai fazer com que os tempos de classificação de dois vetores com as
mesmas chaves, porém arranjadas de formas diversas, possam ser diferentes. O
seu desempenho é facilmente influenciado pela ordem inicial dos itens antes do
processo de triagem.
Inserção Direta (Insertion Sort)  Consiste em percorrer uma lista de
elementos da esquerda para a direita e à medida que se avança os elementos mais
à esquerda vão sendo ordenados. É como se o elemento a ser analisado fosse
‘inserido’ no local correto da lista movimentando os demais elementos para a direita.
Página | 11
Prós:
Funciona melhor quando o vetor está “quase” ordenado.
É um bom método quando se deseja adicionar uns poucos itens a um arquivo já
ordenado e depois obter um outro arquivo ordenado.
O método de ordenação por inserção é estável, pois ele deixa os registros com
chaves iguais na mesma posição relativa.
Contras:
Quando o vetor está muito desordenado, a quantidade de trocas é muito grande,
sendo mais eficaz nesse caso, a ordenação por seleção direta. A situação mais
desfavorável para o método é aquela em que o vetor a ser ordenado se apresenta
na ordem contrária à desejada.
Quicksort É o algoritmo de ordenação interna mais rápido que se conhece para
uma ampla variedade de situações, sendo provavelmente mais utilizado do que
qualquer outro algoritmo. Funciona particionando o vetor a ser ordenado em dois
menores. Os vetores menores são ordenados independentemente e depois os
resultados são combinados para produzir a solução do vetor maior.
Prós:
Velocidade da ordenação. Já que a maioria das aplicações visa um excelente
desempenho, esse é o algoritmo ideal para a maioria das situações.
Contras:
Processo de particionamento que é complicado.
Ineficiência para arquivos já ordenados.
Bubble Sort  Ordena por par de chaves e já na primeira varredura, o elemento de
maior valor estará ordenado em sua posição final. Entretanto, a cada varredura
diminui-se uma chave a ser comparada. A denominação deste método resulta da
associação das chaves com bolhas dentro de um fluido. Cada bolha teria um
diâmetro proporcional ao valor de uma chave. Assim, as bolhas maiores subiriam
Página | 12
mais depressa, o que faria com que, após certo tempo, elas se arranjassem em
ordem de tamanho.
Prós:
Funciona muito bem em vetores previamente ordenados.
Contras:
O algoritmo de ordenação Bubble Sort é um método simples de ordenação por troca.
Sua popularidade vem do seu nome fácil e de sua simplicidade. Porém, é uma das
piores ordenações já concebidas. Ela envolve repetidas comparações e, se
necessário, a troca de dois elementos adjacentes Tem seu pior desempenho em
vetores contrários a ordenação.
Conclusão
Existem métodos de ordenação que são diferentes na sua implementação, mas
cada modelo de algoritmo vai ser ideal dependendo da situação que se encontra o
vetor a ser ordenado. Todos têm seus prós e contras, e todos funcionam bem. A
vantagem da ordenação por seleção direta está na simplicidade do seu algoritmo e
na quantidade mínima de trocas. Existem várias razões para se ordenar uma
sequência, uma delas é a possibilidade se acessar seus dados de modo mais
eficiente.
Página | 13
Bibliografia
Estrutura de Dados - Algoritmos, análise da complexidade e implementações
em Java e C/C++ Ana Fernandes Gomes Ascencio e Graziela Santos Araújo.
Páginas 21 a 89.
Projeto de Algoritmos com implementações em PASCAL e C - Nivio Ziviani.
Páginas 101 a 157.
Programação Estrutura de Dados e Algoritmos em C - Professor Doutor António
Manuel Adrego da Rocha – Páginas 171 à 208.
Estrutura de Dados - Algoritmos de Ordenação - Prof. Othon M. N. Batista
UFSC-CTC-INE - Estruturas de Dados - Ordenação de Dados - Prof. Ronaldo S.
Mello
Algoritmos e Estruturas de Dados I - Marcos Castilho, Fabiano Silva e Daniel
Weingaertner (apostila).
Algoritmos e Estrutura de Dados II - Leandro Rosniak Tibola (apostila).
Estrutura de Dados com Algoritmos e C - Marcos Laureano.

Mais conteúdo relacionado

DOC
Trabalho métodos de ordenação
PDF
Arrays (vetores) em Java
PDF
Metodos de ordenação estrutura de dados
PPTX
Introdução a linguagem C# (CSharp)
PDF
Banco de Dados II Aula 06 - Modelagem de Dados (Modelo Físico)
PDF
POO - 13 - Arrays em Java
PDF
Exercicio Vetores Pascal
PDF
Algoritmo Shell Sort
Trabalho métodos de ordenação
Arrays (vetores) em Java
Metodos de ordenação estrutura de dados
Introdução a linguagem C# (CSharp)
Banco de Dados II Aula 06 - Modelagem de Dados (Modelo Físico)
POO - 13 - Arrays em Java
Exercicio Vetores Pascal
Algoritmo Shell Sort

Mais procurados (20)

PDF
Banco de Dados II Aula Dinâmica 1 (Perguntas e Respostas)
PPTX
Algoritmo e lógica de programação - Aula 1
PPTX
Introdução a Linguagem de Programação PHP
PDF
Exercicios Vetores (Arrays) - Estruturas de dados e algoritmos com Java
PDF
Exercicios Pilhas (Stacks) - Estruturas de dados e algoritmos com Java
PDF
POO - 14 - Vetores
PDF
Exercitando modelagem em UML
PDF
15 Tablas Hash
 
PPTX
Algoritmos de ordenação
PDF
Word Aula 13
PPT
Herencia Y Polimorfismo
PPTX
01 php - introdução ao php
PDF
Aula 4 - Teste de mesa
PDF
Aula 8 - Comandos de Entrada e Saída
PPTX
Aula 02 - JavaScript: Arrays
PPS
Software Aplicativo
PPTX
Diagrama de sequência
DOCX
Exercícios - Herança - Java
PDF
Estrutura de Dados - Aula 04 - Listas Estáticas
PDF
Metodologia orientado a objetos
Banco de Dados II Aula Dinâmica 1 (Perguntas e Respostas)
Algoritmo e lógica de programação - Aula 1
Introdução a Linguagem de Programação PHP
Exercicios Vetores (Arrays) - Estruturas de dados e algoritmos com Java
Exercicios Pilhas (Stacks) - Estruturas de dados e algoritmos com Java
POO - 14 - Vetores
Exercitando modelagem em UML
15 Tablas Hash
 
Algoritmos de ordenação
Word Aula 13
Herencia Y Polimorfismo
01 php - introdução ao php
Aula 4 - Teste de mesa
Aula 8 - Comandos de Entrada e Saída
Aula 02 - JavaScript: Arrays
Software Aplicativo
Diagrama de sequência
Exercícios - Herança - Java
Estrutura de Dados - Aula 04 - Listas Estáticas
Metodologia orientado a objetos
Anúncio

Destaque (9)

PPTX
Trabalho sobre algoritmo
PDF
Analise de sistemas
PPT
Trabalho da ti cs valendo
PPT
Algoritmo
PPTX
Algoritimo - Raul
DOC
Aps lista de exercícios
DOCX
Trabalho tecnologia da informação, TI
PPT
Lógica de Programação - Estrutura de repetição
DOC
Analise de sistemas 1 semestre portfólio individual
Trabalho sobre algoritmo
Analise de sistemas
Trabalho da ti cs valendo
Algoritmo
Algoritimo - Raul
Aps lista de exercícios
Trabalho tecnologia da informação, TI
Lógica de Programação - Estrutura de repetição
Analise de sistemas 1 semestre portfólio individual
Anúncio

Semelhante a Trabalho de algoritmos (20)

PPTX
ODT
Eda trabalho seleção.docx_0
DOCX
Aulas de estrutura de dados por Ayrton Yagami
PDF
Análise de desempenho de algoritmos de ordenação
PDF
Ordenação
PDF
7082 texto do artigo-33807-2-10-20180903
PDF
15 algoritmos de busca em tabelas - sequencial e binaria
PPTX
Big Data e Data Science - GBG - Google Business Group
PDF
Algorimos De Ordenação
DOCX
2 referencial teorico
PDF
Semana10-ordenacao-pesquisa-vetores
PDF
mod4-estruturas-dadosestaticas-ordenacao
PDF
14 algoritmos de classificacao de tabelas
PDF
Cap09
PDF
Cap09
PDF
Cap09
PDF
Java 05
PPTX
AMOSTRAGEM. amostras de uma população pptx
PPTX
Linguagem C - Vetores
PPTX
Aprendizado de Máquinas com Azure Machine Learning e R
Eda trabalho seleção.docx_0
Aulas de estrutura de dados por Ayrton Yagami
Análise de desempenho de algoritmos de ordenação
Ordenação
7082 texto do artigo-33807-2-10-20180903
15 algoritmos de busca em tabelas - sequencial e binaria
Big Data e Data Science - GBG - Google Business Group
Algorimos De Ordenação
2 referencial teorico
Semana10-ordenacao-pesquisa-vetores
mod4-estruturas-dadosestaticas-ordenacao
14 algoritmos de classificacao de tabelas
Cap09
Cap09
Cap09
Java 05
AMOSTRAGEM. amostras de uma população pptx
Linguagem C - Vetores
Aprendizado de Máquinas com Azure Machine Learning e R

Trabalho de algoritmos

  • 1. CENTRO UNIVERSITÁRIO CARIOCA Curso de Graduação em Ciência da Computação Sandro Marcelo Arpi Igor Cavalcante de Souza Victor Hugo Mendes Alves Métodos de Pesquisa e Ordenação Seleção Direta (Selection Sort) Rio de Janeiro 2014
  • 2. Página | 2 Sumário Definição .....................................................................................................................3 Algoritmo em Pascal de ordenação por seleção (selection sort).................................4 Detalhamento do Algoritmo.........................................................................................5 Algoritmo em Pascal de ordenação Bubble Sort.........................................................7 Algoritmo de ordenação por inserção (Insertion Sort).................................................8 Exemplos.....................................................................................................................9 Aplicabilidade ............................................................................................................10 Comparando com outros métodos de ordenação .....................................................10 Conclusão .................................................................................................................12 Bibliografia:................................................................................................................13
  • 3. Página | 3 Definição Ordenação por Seleção (Selection Sort) Ordenação é o processo de arranjar um conjunto de informações semelhantes em uma ordem crescente ou decrescente. Especificamente, dada uma lista ordenada i de n elementos, então: i1 <= i2 <= ... <= in. É também um requisito para a maioria das aplicações, sejam elas locais ou web. É necessário ordenar para que possa se ter acesso de forma mais fácil à informação desejada. Os métodos de ordenação são classificados em dois grandes grupos. Se o arquivo a ser ordenado cabe todo na memória principal, então o método de ordenação é chamado de ordenação interna. Neste caso o número de registros a ser ordenado é pequeno o bastante para caber em um array do Pascal. Se o arquivo a ser ordenado não cabe na memória principal e, por isso, tem que ser armazenado em disco, então o método de ordenação é chamado de ordenação externa. A principal diferença entre os dois métodos é que, em um método de ordenação interna, qualquer registro pode ser imediatamente acessado, enquanto, em um método de ordenação externa, os registros são acessados sequencialmente ou em grandes blocos. Existem alguns algoritmos de ordenação, como o bubble sort, quick sort, merge sort, heap sort, inserção direta ou insertion sort e seleção direta ou selection sort. O método de ordenação por seleção caracteriza-se por procurar, a cada iteração, a chave de menor (ou maior) valor do vetor e colocá-la na sua posição definitiva correta, qual seja, no início (ou no final) do vetor, por troca com a que ocupa aquela posição. O vetor a ser ordenado passa a ter um elemento a menos para ser usado nas comparações. O mesmo processo é repetido para a parte restante do vetor, até que este fique reduzido a um único elemento, quando então estará ordenado. Os métodos de ordenação diferenciam-se uns dos outros, pelo critério utilizado para
  • 4. Página | 4 selecionar, a cada iteração, a chave de menor (ou maior) valor. Os algoritmos de ordenação por seleção utilizam uma pesquisa sequencial Algoritmo em Pascal de ordenação por seleção (selection sort) Program SelectionSort ; var x: array[1..10] of integer; i,j,eleito,menor,posi: integer; Begin for i:=1 to 10 do begin write('Digite o ',i,' numero: '); readln(x[i]); end; for i:=1 to 9 do begin eleito:= x[i]; menor:= x[i+1]; posi:= i+1; for j:=i+1 to 10 do if (x[j] < menor) then begin menor:= x[j]; posi:= j; end; if (menor < eleito) then begin x[i]:= x[posi]; x[posi]:= eleito; end; end; writeln(); for i:=1 to 10 do writeln(i,' numero: ', x[i]); End.
  • 5. Página | 5 Detalhamento do Algoritmo Como funciona o método de ordenação por seleção direta? Bem, pegamos cada elemento do vetor e comparamos com os demais elementos, Ao encontrarmos o menor (ou maior) valor, efetuamos a troca de posições entre eles, ou seja: 1° criamos um for com um índice de 1 até n para preencher o vetor for i:=1 to 10 do begin write('Digite o ',i,' numero: '); readln(x[i]); end; 2° criamos outro for para compararmos os elementos da posição (índice) 1 até a posição n-1 com as demais posições do vetor 3° pegamos o elemento do índice do vetor e separamos (no caso do algoritmo abaixo, consideramos ele como o eleito) 4° atribuímos o valor na variável “menor”, do índice + 1 5° variável para a troca de posição recebe índice + 1 for i:=1 to 9 do begin eleito:= x[i]; menor:= x[i+1]; posi:= i+1; 6° Após atribuir valores para as variáveis que vão fazer com que a comparação e a troca de posição aconteçam, executaremos outro for começando do índice + 1 (que será atribuído à variável j) até n, para achar o menor valor entre os elementos que estão a direita do eleito. 7° para acharmos o menor valor, teremos que ter uma condição dentro desse for, para que haja a comparação entre os elementos e dessa comparação se encontre o menor valor. 8° após encontrarmos esse valor, atribuímos ele a variável “menor” e informamos qual a posição dele no vetor.
  • 6. Página | 6 for j:=i+1 to 10 do if (x[j] < menor) then begin menor:= x[j]; posi:= j; end; 9° finalmente o comparamos com o valor que estava reservado na variável “eleito”, e se esse valor for menor que o valor do eleito, efetuamos a troca de posições 10° ao final da execução, imprimimos o vetor ordenado pelo método de ordenação por seleção direta. if (menor < eleito) then begin x[i]:= x[posi]; x[posi]:= eleito; end; end; writeln(); for i:=1 to 10 do writeln(i,' numero: ', x[i]); End. Resumindo fica assim:  Procurar o menor elemento e trocar com o elemento na primeira posição.  Procurar o segundo menor elemento e trocar com o elemento na segunda posição.  Proceder assim até a ordenação estar completa.
  • 7. Página | 7 Algoritmo em Pascal de ordenação Bubble Sort Program BubbleSort ; var x: array[1..10] of integer; n,i,aux: integer; Begin for i:=1 to 10 do begin write('Digite o ',i,' numero: '); readln(x[i]); end; for n:=1 to 10 do for i:=1 to 9 do if (x[i] > x[i+1]) then begin aux:= x[i]; x[i]:= x[i+1]; x[i+1]:= aux; end; writeln(); for i:=1 to 10 do writeln(i, ' numero: ', x[i]); End.
  • 8. Página | 8 Algoritmo de ordenação por inserção (Insertion Sort) Program InsertionSort ; var x: array[1..10] of integer; i,j,eleito: integer; Begin for i:=1 to 10 do begin write('Digite o ',i,' numero: '); readln(x[i]); end; for i:=2 to 10 do begin eleito:= x[i]; j:= i-1; while (j>=1) and (x[j]>eleito) do begin x[j+1]:= x[j]; j:= j-1; end; x[j+1]:= eleito; end; writeln(); for i:=1 to 10 do writeln(i,' numero: ', x[i]); End.
  • 9. Página | 9 Exemplos C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 T 14 35 26 7 76 9 44 34 12 3 2 5 89 57 14 19 1/10 13 2 26 7 76 9 44 34 12 3 35 5 89 57 14 19 2/9 12 2 3 7 76 9 44 34 12 26 35 5 89 57 14 19 3/11 11 2 3 5 76 9 44 34 12 26 35 7 89 57 14 19 4/11 10 2 3 5 7 9 44 34 12 26 25 76 89 57 14 19 9 2 3 5 7 9 44 34 12 26 25 76 89 57 14 19 6/8 8 2 3 5 7 9 12 34 44 26 25 76 89 57 14 19 7/14 7 2 3 5 7 9 12 14 44 26 25 76 89 57 34 19 8/15 6 2 3 5 7 9 12 14 19 26 25 76 89 57 34 44 9/10 5 2 3 5 7 9 12 14 19 25 26 76 89 57 34 44 4 2 3 5 7 9 12 14 19 25 26 76 89 57 34 44 11/14 3 2 3 5 7 9 12 14 19 25 26 34 89 57 76 44 12/15 2 2 3 5 7 9 12 14 19 25 26 34 44 57 76 89 1 2 3 5 7 9 12 14 19 25 26 34 44 57 76 89 C=105 2 3 5 7 9 12 14 19 25 26 34 44 57 76 89 T=10 Nesse exemplo, em azul são as posições do vetor (em muitas linguagens ele começa na posição 0 (zero)). Na coluna C, temos a quantidade de comparações. Na coluna T, temos as trocas, e quais posições foram trocadas.
  • 10. Página | 10 Aplicabilidade É um algoritmo de simples implementação. Pelo fato do método varrer todas as posições de uma lista repetidamente, sua melhor aplicabilidade é em pequenos conjuntos de dados. Comparando com outros métodos de ordenação Seleção Direta Prós: Por ser um algoritmo de ordenação de local, não precisa de armazenamento temporário além do necessário para guardar a lista original. Pouco uso de memória. Contras: A quantidade de comparações efetuadas é constante para um dado n, ou seja, não depende do arranjo prévio das chaves. Mesmo que os itens estejam ordenados, o algoritmo fará todo o processo item a item. Por isso baixa eficiência em listas grandes Já o número de trocas de itens mínimos durante a busca da menor chave em cada iteração não é constante, pois depende da ordem em que as chaves se apresentam. Este fato vai fazer com que os tempos de classificação de dois vetores com as mesmas chaves, porém arranjadas de formas diversas, possam ser diferentes. O seu desempenho é facilmente influenciado pela ordem inicial dos itens antes do processo de triagem. Inserção Direta (Insertion Sort)  Consiste em percorrer uma lista de elementos da esquerda para a direita e à medida que se avança os elementos mais à esquerda vão sendo ordenados. É como se o elemento a ser analisado fosse ‘inserido’ no local correto da lista movimentando os demais elementos para a direita.
  • 11. Página | 11 Prós: Funciona melhor quando o vetor está “quase” ordenado. É um bom método quando se deseja adicionar uns poucos itens a um arquivo já ordenado e depois obter um outro arquivo ordenado. O método de ordenação por inserção é estável, pois ele deixa os registros com chaves iguais na mesma posição relativa. Contras: Quando o vetor está muito desordenado, a quantidade de trocas é muito grande, sendo mais eficaz nesse caso, a ordenação por seleção direta. A situação mais desfavorável para o método é aquela em que o vetor a ser ordenado se apresenta na ordem contrária à desejada. Quicksort É o algoritmo de ordenação interna mais rápido que se conhece para uma ampla variedade de situações, sendo provavelmente mais utilizado do que qualquer outro algoritmo. Funciona particionando o vetor a ser ordenado em dois menores. Os vetores menores são ordenados independentemente e depois os resultados são combinados para produzir a solução do vetor maior. Prós: Velocidade da ordenação. Já que a maioria das aplicações visa um excelente desempenho, esse é o algoritmo ideal para a maioria das situações. Contras: Processo de particionamento que é complicado. Ineficiência para arquivos já ordenados. Bubble Sort  Ordena por par de chaves e já na primeira varredura, o elemento de maior valor estará ordenado em sua posição final. Entretanto, a cada varredura diminui-se uma chave a ser comparada. A denominação deste método resulta da associação das chaves com bolhas dentro de um fluido. Cada bolha teria um diâmetro proporcional ao valor de uma chave. Assim, as bolhas maiores subiriam
  • 12. Página | 12 mais depressa, o que faria com que, após certo tempo, elas se arranjassem em ordem de tamanho. Prós: Funciona muito bem em vetores previamente ordenados. Contras: O algoritmo de ordenação Bubble Sort é um método simples de ordenação por troca. Sua popularidade vem do seu nome fácil e de sua simplicidade. Porém, é uma das piores ordenações já concebidas. Ela envolve repetidas comparações e, se necessário, a troca de dois elementos adjacentes Tem seu pior desempenho em vetores contrários a ordenação. Conclusão Existem métodos de ordenação que são diferentes na sua implementação, mas cada modelo de algoritmo vai ser ideal dependendo da situação que se encontra o vetor a ser ordenado. Todos têm seus prós e contras, e todos funcionam bem. A vantagem da ordenação por seleção direta está na simplicidade do seu algoritmo e na quantidade mínima de trocas. Existem várias razões para se ordenar uma sequência, uma delas é a possibilidade se acessar seus dados de modo mais eficiente.
  • 13. Página | 13 Bibliografia Estrutura de Dados - Algoritmos, análise da complexidade e implementações em Java e C/C++ Ana Fernandes Gomes Ascencio e Graziela Santos Araújo. Páginas 21 a 89. Projeto de Algoritmos com implementações em PASCAL e C - Nivio Ziviani. Páginas 101 a 157. Programação Estrutura de Dados e Algoritmos em C - Professor Doutor António Manuel Adrego da Rocha – Páginas 171 à 208. Estrutura de Dados - Algoritmos de Ordenação - Prof. Othon M. N. Batista UFSC-CTC-INE - Estruturas de Dados - Ordenação de Dados - Prof. Ronaldo S. Mello Algoritmos e Estruturas de Dados I - Marcos Castilho, Fabiano Silva e Daniel Weingaertner (apostila). Algoritmos e Estrutura de Dados II - Leandro Rosniak Tibola (apostila). Estrutura de Dados com Algoritmos e C - Marcos Laureano.