Você está na página 1de 20

Algoritmos de Ordenação

Busca Inserção
Linear

Seleção
Modos Métodos

Busca Binária ALGORITIMO

Pesquisa Ordenação Método de Bolha

Hash
ITERATIV Quicksort
RECURSSIVO
O

Backtracking Gulosos Dinâmicos


UNINORTE
ALGORITMOS DE ORDENAÇÃO
MÉTODOS DE
ORDENAÇÃ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

Os métodos de ordenação se classificam em:

1. Ordenação Interna: todos os elementos a serem ordenados cabem na memória


principal e qualquer registro pode ser imediatamente acessado.

2. Ordenação Externa: os elementos a serem ordenados não cabem na memória


principal e os registros são acessados sequencialmente ou em grandes blocos
(em memória auxiliar ou disco HD).

UNINORTE
MÉTODOS DE

ORDENAÇÃO
Dentro da ordenação interna temos : Métodos Simples e os
Métodos Eficientes.

• Na escolha de um algoritmo de ordenação interna deve ser


considerado principalmente:

 O tempo gasto pela ordenação;


 O uso econômico da memória disponível;

• A maioria dos métodos de ordenação é baseado em comparação


de chaves. (Ex: insertionsort, selectionsort, etc);

• Existem métodos de ordenação que utilizam o princípio da


distribuição. (Ex: radixsort, bucketsort, etc);
UNINORTE
INSERTION SORT

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:

 Fácil entendimento e compreensão


 Fácil implementação

UNINORTE
INSERTION SORT
Funcionamento:

 O primeiro elemento que é selecionado, é o segundo


 Se o elemento selecionado for menor que o elemento antes
dele, o elemento selecionado é trocado com seu antecessor
 A ideia é repetir o processo, sempre “empurrando” o menor
elemento para o ínicio do grupo de elementos (vetor).
2 1 4 6 3 5

1>2
1 2 4 6 3 5

4>2
1 2 4 6 3 5

E assim sucessivamente ....


UNINORTE
INSERTION SORT
Questão para treino: Comentar as linhas de instrução do algoritimo insertion sortion
passado para organizar itens de um vetor cujo tamanho seja informado pelo usuário.

void insertionSortD(int array[], int array[j] = array[j - 1]; scanf("%d",&ordem);


tamanho) { array[j - 1] = tmp; if (ordem == 1){
int i, j, tmp; j--;
for (i = 1; i < tamanho; i++) { } insertionSortC(array,tamanho);
j = i; } printf("\nArray em
while (j > 0 && array[j - 1] < } ordem crescente: ");
array[j]) {   for(int i=0; i<tamanho;
tmp = array[j]; int main(int argc, char** argv) i++){
array[j] = array[j - 1]; { printf("\n\t\t\t%d",
array[j - 1] = tmp; int array[100], tamanho, array[i]);
j--; ordem; }
} printf("\n\n\t Entre com o
} número de termos...: "); }else if (ordem ==2) {
} scanf("%d", &tamanho);
void insertionSortC(int array[], int printf("\n\t Entre com os insertionSortD(array,tamanho);
tamanho) { elementos do array...:"); printf("\nArray em ordem
int i, j, tmp; for(int i = 0; i < tamanho;i++){ decrescente: ");
for (i = 1; i < tamanho; i++) { printf("\nDigite o %dº for(int i=0; i<tamanho; i++){
j = i; número: ",i+1); printf("\n\t\t\t%d",
while (j > 0 && array[j - 1] > scanf("%d",&array[i]); array[i]);
array[j]) { } }
tmp = array[j]; printf("\n\t Digite 1 para }
ordernar o array em ordem return 0;
crescente ou 2 para ordem }
decrescente: ");
UNINORTE
SELECTION SORT

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

void bubble_sort (int vet[], }


int max) { } while (flag == 1); int vetor[max];
int flag, i, aux;
for (i = 0; i < max; i++) { for (i = 0; i < max; i++) {
do { printf ("%d ",vet[i]); scanf ("%d",&vetor[i]);
flag = 0; } }
for (i = 0; i < (max - 1); printf ("\n");
i++) { } bubble_sort (vetor, max);
 
if (vet[i] > vet[i+1]) main () { }
{ int max, i;
aux = vet[i];
vet[i] = vet[i+1]; scanf ("%d", &max);
vet[i+1] = aux;
flag =1;
}

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

Você também pode gostar