SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
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.

Weitere ähnliche Inhalte

Was ist angesagt?

Algoritmos e linguagem pascal
Algoritmos e linguagem pascalAlgoritmos e linguagem pascal
Algoritmos e linguagem pascal
angelicamenegassi
 
Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1
Pacc UAB
 

Was ist angesagt? (20)

Algoritmos e linguagem pascal
Algoritmos e linguagem pascalAlgoritmos e linguagem pascal
Algoritmos e linguagem pascal
 
Algoritmos 05 - Estruturas de repetição
Algoritmos 05 - Estruturas de repetiçãoAlgoritmos 05 - Estruturas de repetição
Algoritmos 05 - Estruturas de repetição
 
Lecture 3 insertion sort and complexity analysis
Lecture 3   insertion sort and complexity analysisLecture 3   insertion sort and complexity analysis
Lecture 3 insertion sort and complexity analysis
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02
 
Sql ejercicios resueltos
Sql ejercicios resueltosSql ejercicios resueltos
Sql ejercicios resueltos
 
ShellSort - Ordenação
ShellSort - OrdenaçãoShellSort - Ordenação
ShellSort - Ordenação
 
Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - Recursividade
 
Ordenação
OrdenaçãoOrdenação
Ordenação
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
Variáveis, constantes e tipos de dados
Variáveis, constantes e tipos de dadosVariáveis, constantes e tipos de dados
Variáveis, constantes e tipos de dados
 
Metodos de ordenação estrutura de dados
Metodos de ordenação   estrutura de dadosMetodos de ordenação   estrutura de dados
Metodos de ordenação estrutura de dados
 
Backtracking
BacktrackingBacktracking
Backtracking
 
aula 04 - Logica de programacao
aula 04 - Logica de programacaoaula 04 - Logica de programacao
aula 04 - Logica de programacao
 
Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmos
 
Binary search algorithm
Binary search algorithmBinary search algorithm
Binary search algorithm
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - Java
 
Integration testing
Integration testingIntegration testing
Integration testing
 
Algoritmos em portugol
Algoritmos em portugolAlgoritmos em portugol
Algoritmos em portugol
 
Sorting method data structure
Sorting method data structureSorting method data structure
Sorting method data structure
 

Andere mochten auch (9)

Trabalho sobre algoritmo
Trabalho sobre algoritmoTrabalho sobre algoritmo
Trabalho sobre algoritmo
 
Analise de sistemas
Analise de sistemasAnalise de sistemas
Analise de sistemas
 
Trabalho da ti cs valendo
Trabalho da ti cs valendoTrabalho da ti cs valendo
Trabalho da ti cs valendo
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Algoritimo - Raul
Algoritimo - RaulAlgoritimo - Raul
Algoritimo - Raul
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercícios
 
Trabalho tecnologia da informação, TI
Trabalho tecnologia da informação, TITrabalho tecnologia da informação, TI
Trabalho tecnologia da informação, TI
 
Lógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetiçãoLógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetição
 
Analise de sistemas 1 semestre portfólio individual
Analise de sistemas 1 semestre portfólio individualAnalise de sistemas 1 semestre portfólio individual
Analise de sistemas 1 semestre portfólio individual
 

Ähnlich wie Trabalho de algoritmos

15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binaria
Ricardo Bolanho
 
Algorimos De Ordenação
Algorimos De OrdenaçãoAlgorimos De Ordenação
Algorimos De Ordenação
Brian Supra
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
Pedro Valente
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
Ricardo Bolanho
 
Metodos de ordenação final
Metodos de ordenação   finalMetodos de ordenação   final
Metodos de ordenação final
Gabriel Malaquias
 
Aula 8 - Vetores e Matrizes.pptx
Aula 8 - Vetores e Matrizes.pptxAula 8 - Vetores e Matrizes.pptx
Aula 8 - Vetores e Matrizes.pptx
Osvano Silva
 

Ähnlich wie Trabalho de algoritmos (20)

Aula 4
Aula 4 Aula 4
Aula 4
 
Eda trabalho seleção.docx_0
Eda trabalho seleção.docx_0Eda trabalho seleção.docx_0
Eda trabalho seleção.docx_0
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton Yagami
 
7082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-201809037082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-20180903
 
15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binaria
 
Big Data e Data Science - GBG - Google Business Group
Big Data e Data Science - GBG - Google Business GroupBig Data e Data Science - GBG - Google Business Group
Big Data e Data Science - GBG - Google Business Group
 
Algorimos De Ordenação
Algorimos De OrdenaçãoAlgorimos De Ordenação
Algorimos De Ordenação
 
2 referencial teorico
2 referencial teorico2 referencial teorico
2 referencial teorico
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacao
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
 
Cap09
Cap09Cap09
Cap09
 
Cap09
Cap09Cap09
Cap09
 
Cap09
Cap09Cap09
Cap09
 
Java 05
Java 05Java 05
Java 05
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Aprendizado de Máquinas com Azure Machine Learning e R
Aprendizado de Máquinas com Azure Machine Learning e RAprendizado de Máquinas com Azure Machine Learning e R
Aprendizado de Máquinas com Azure Machine Learning e R
 
Metodos de ordenação final
Metodos de ordenação   finalMetodos de ordenação   final
Metodos de ordenação final
 
Aula 8 - Vetores e Matrizes.pptx
Aula 8 - Vetores e Matrizes.pptxAula 8 - Vetores e Matrizes.pptx
Aula 8 - Vetores e Matrizes.pptx
 

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.