Algoritmos de Ordenação
Prof. Frederico Brito Fernandes
[email protected]
CONTEÚDO
(1) Auto-avaliação
(2) Ordenação de Dados
(3) Ordenação por troca: bubble sort
(1) Auto-avaliação
Ordenação/Classificação
• Antes de prosseguir:
– Faça o acompanhamento das variáveis, conforme explicado na aula
passada, para realiazar uma pesquisa binária buscando as chaves:
• 5
• 12
vet
inicio
0
1
2
3
4
1
3
4
5
9
fim
meio
vet[i]
vet[i+1]
chave
– Implemente o algoritmo de buscaBinária de forma recursiva, e faça o
acompanhamento novamente
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
2
(2) Ordenação
Ordenação/Classificação
• Temos basicamente duas formas de realizar ordenação:
– ou inserimos os elementos na estrutura de dados respeitando a
ordenação (dizemos que a ordenação é garantida por construção);
– ou a partir de um conjunto de dados já criado, aplicamos um algoritmo
para ordenar seus elementos.
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
3
(3) Ordenação por troca
Ordenação Bolha (Bubble Sort)
• A idéia fundamental é fazer uma
série de comparações entre os
elementos do vetor.
• Pares de elementos do vetor são
comparados dois a dois (e
eventualmente trocados) até o
final do vetor.
• Quando dois elementos estão fora
de ordem, esses dois elementos
são trocados de posição, ficando
em ordem correta.
• O processo é repetido até que
nenhuma troca seja feita.
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
7 4 1
9 2
4 7 1
9 2
1 7 4
9 2
1 4 7
9 2
1 2 7
9 4
1 2 4
9 7
1 2 4
7 9
4
(3) Ordenação por troca
Pseudocódigo
Algorithm Bubble_Sort(X, n)
Input array X of n integers
Output array X sorted in a non-decreasing order
for i  0 to n  1 do
for j  i+1 to n-1 do
if (X[i]>X[j]) then
s  X[i];
X[i]  X[j];
X[j]  s;
O(n2)
return X
// after i-th round, the i-th smallest number is at i-th position.
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
5
(3) Ordenação por troca
Código em C (outra versão do bubble sort)
#include <stdio.h>
#define MAX 10
void troca(int i, int j, int v[]){
int aux= v[i];
v[i]=v[j];
v[j]=aux; }
void bubbleSort(int v[], int n){
int i=0;
while (i<n-1){
if (v[i]>v[i+1]){
troca(i,i+1,v);
i=0;
}
else i++;
}
}
void imprimeVetor(int v[], int n){
for (int i=0;i<n;i++) printf(" %3d",v[i]);
}
Estrutura, Pesquisa e Ordenação de Dados
void bubbleSortRecursivo(int v[], int n){
int trocou=0, i=0;
while (i<n-1){
if (v[i]>v[i+1]){
troca(i,i+1,v);
trocou=1;
}
i++;
}
if (trocou==1) bubbleRecursivo(v, n);
}
main(){
int qtde=MAX;
int vet[MAX] = {1,5,7,2,8,3,6,12,4,10};
printf("\nVetor Original:\n");
imprimeVetor(vet,qtde);
bubbleSort(vet,qtde);
//bubbleSortRecursivo(vet,qtde);
printf("\nVetor Ordenado:\n");
imprimeVetor(vet,qtde);
}
Frederico Brito Fernandes
6
Download

Aula 18 - Frederico Brito Fernandes