Escolar Documentos
Profissional Documentos
Cultura Documentos
AULAS - Algorimos de Ordenação - Continuação
AULAS - Algorimos de Ordenação - Continuação
Busca Inserção
Linear
Seleção
Modos Métodos
Hash
ITERATIV Quicksort
RECURSSIVO
O
UNINORTE
MÉTODOS DE
ORDENAÇÃO
Técnicas de ordenação para organizar um conjunto de dados, é uma operação de
rearranjo dos dados em uma determinada ordem, eles são conhecidos como
Métodos de Ordenação ou Algoritmos de Ordenação.
Podem ser aplicados a diversos tipos de estrutura, tais como por exemplo:
Vetores;
Matrizes
UNINORTE
MÉTODOS DE
•
ORDENAÇÃO
Dentro da ordenação interna temos : Métodos Simples e os
Métodos Eficientes.
UNINORTE
INSERTION SORT
• A idéia da ordenação por inserção é dividir os
elementos em duas subestruturas, uma com os
elementos já ordenados e outra com elementos
ainda por ordenar.
• Características:
UNINORTE
INSERTION SORT
Funcionamento:
1>2
1 2 4 6 3 5
4>2
1 2 4 6 3 5
UNINORTE
SELECTION SORT
• Consiste em ordenar a lista “selecionando” a cada iteração os menores
itens possíveis e os colocam da esquerda para a direita.
•
• Necessário para cada item da lista percorrê-la toda (logo, serão
necessários dois loops: um para cada elemento da lista e outro para
cada um desses elementos percorrer toda a lista).
VANTAGENS X DESVANTAGENS:
Apresenta uma das menores quantidades de movimentos entre os
elementos, assim pode haver algum ganho quando se necessita ordenar
estruturas complexas.
Não é estável (depende da implementação).
Não é vantajoso para listas com grande números de itens.
UNINORTE
SELECTION SORT
Questão Treino: Comentar cada linha de código do algoritimo de selection sort
passado.
void selection_sort (int vetor[],int max) { for (i = 0; i < max; i++) {
int i, j, min, aux; printf ("%d ",vetor[i]);
}
for (i = 0; i < (max - 1); i++) { printf ("\n");
min = i; }
for (j = i+1; j < max; j++) {
if (vetor[j] < vetor[min]) { main () {
min = j; int max, i;
} scanf ("%d",&max);
}
if (i != min) { int vetor[max];
aux = vetor[i]; for (i = 0; i < max; i++) {
vetor[i] = vetor[min]; scanf ("%d",&vetor[i]);
vetor[min] = aux; }
}
} selection_sort (vetor, max);
UNINORTE
BUBBLE SORT
UNINORTE
BUBBLE SORT
Lembra a forma como as bolhas procuram seu próprio nível.
FUNCIONAMENTO
A idéia da ordenação por bolhas é flutuar o maior elemento
para o fim.
Repita n vezes a flutuação.
Vantagem x Desvantagem:
Simples de entender e implementar.
Tem um número muito grande de movimentação de
elementos, assim não deve ser usado se a estrutura a ser
ordenada for complexa
UNINORTE
BUBBLE SORT
Questão para treino: Comente cada linha do código passado
UNINORTE
QUICK SORT
UNINORTE
QUICK SORT
Características:
Considerado um método de ordenação muito rápido e eficiente
Criado inicialmente para tentar traduzir um dicionário de inglês para
russo, ordenando as palavras, tendo como objetivo reduzir o problema
original em subproblemas que possam ser resolvidos mais fácil e
rápido.
FUNCIONAMENTO:
Escolha um elemento da lista, denominado pivô;
Particiona: rearranje a lista de forma que todos os elementos
anteriores ao pivô sejam menores que ele, e todos os elementos
posteriores ao pivô sejam maiores que ele. Ao fim do processo o pivô
estará em sua posição final e haverá duas sub listas não ordenadas.
Essa operação é denominada partição;
Recursivamente ordene a sub lista dos elementos menores e a sub
lista dos elementos maiores;
UNINORTE
QUICK SORT
Questão para treino: comente cada linha de código
void Quick(int vetor[10], int inicio, int fim); i = inicio;
int main(){ j = fim;
int vetor[10] = {7, 9, 4, 3, 6, 1, 18, 2, 10,
5}; meio = (int) ((i + j) / 2);
int i; pivo = vetor[meio];
printf("Vetor desordenado:\n");
for(i = 0; i < 10; i++){ do{
printf("%d ", vetor[i]); while (vetor[i] < pivo) i = i + 1;
} while (vetor[j] > pivo) j = j - 1;
printf("\n");
if(i <= j){
Quick(vetor, 0, 9); aux = vetor[i];
vetor[i] = vetor[j];
printf("Vetor ordenado:\n"); vetor[j] = aux;
for(i = 0; i < 10; i++){ i = i + 1;
printf("%d ", vetor[i]); j = j - 1;
} }
printf("\n"); }while(j > i);
}
if(inicio < j) Quick(vetor, inicio, j);
void Quick(int vetor[10], int inicio, int fim){ if(i < fim) Quick(vetor, i, fim);
int pivo, aux, i, j, meio; }
UNINORTE
Referências
• DOBRUSHKIN, Vladimir A. Métodos para Análise de
Algoritmos. LTC, 03/2012.
• TANENBAUM, Andrew S., WOODHULL, S. Sistemas
Operacionais: Projetos e Implementação - O Livro do
Minix. Bookman, 01/2008.
• MONTEIRO, Mario A. Introdução à Organização de
Computadores, 5ª edição. LTC, 05/2007.
UNINORTE 20