Trabalho de algoritmos

817 visualizações

Publicada em

Selection Sort

Publicada em: Software
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
817
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
9
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Trabalho de algoritmos

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.

×