Você está na página 1de 13

UFSC-CTC-INE INE5384 - Estruturas de Dados

Ordenao de Dados

Prof. Ronaldo S. Mello 2002/2

Ordenao de Dados
Processo bastante utilizado na computao de uma estrutura de dados Dados ordenados garantem uma melhor performance de pesquisa a uma ED
busca seqencial
evita a varredura completa de uma lista de dados s possvel se os dados esto ordenados apresenta baixa complexidade

busca binria

Compromisso
A complexidade da ordenao da ED no deve exceder a complexidade da computao a ser feita na ED sem o processo de ordenao Exemplo: deseja-se realizar uma nica pesquisa a um vetor
busca seqencial O(n) ordenao O(n log n) No vale a pena ordenar!

Consideraes
Dados esto mantidos em um vetor Elemento do vetor
objeto que possui um atributo chave que deve ser mantido ordenado

Um mtodo troca(x,y) realiza a troca dos elementos presentes nas posies x e y do vetor Para fins de exemplo, nmeros inteiros sero utilizados como elementos

Classe Ordenador incio vetor inteiro[ ]; n inteiro; /* tamanho do vetor */

Implementao

construtor Ordenador (REF v[ ] inteiro); incio n v.lenght; se n < 1 ento Exceo VetorVazio(); vetor v; ordena(); v vetor; fim; mtodo ordena(); incio fim; fim;

Implementao
Classe Ordenador incio ... mtodo troca(x inteiro, y inteiro); incio aux inteiro; aux vetor[x]; vetor[x] vetor[y]; vetor[y] aux; fim; fim;

Mtodos de Ordenao
Ordenao por troca
BubbleSort (mtodo da bolha) QuickSort (mtodo da troca e partio)

Ordenao por insero


InsertionSort (mtodo da insero direta) BinaryInsertionSort (mtodo da insero direta binria)

Ordenao por seleo


SelectionSort (mtodo da seleo direta) HeapSort (mtodo da seleo em rvore)

Outros mtodos
MergeSort (mtodo da intercalao) BucketSort (mtodo da distribuio de chave)

Mtodos de Ordenao Simples


So trs
BubbleSort InsertionSort SelectionSort

Caractersticas
fcil implementao alta complexidade comparaes ocorrem sempre entre posies adjacentes do vetor

Reviso de Somatria
Propriedade 1 (P1)

i=1

n (n + 1) 2

Propriedade 2 (P2)

i=1

ki

= k

i=1

BubbleSort
BubbleSort um mtodo simples de troca
ordena atravs de sucessivas trocas entre pares de elementos do vetor

Caractersticas
realiza varreduras no vetor, trocando pares adjacentes de elementos sempre que o prximo elemento for menor que o anterior aps uma varredura, o maior elemento est corretamente posicionado no vetor e no precisa mais ser comparado
aps a i-sima varredura, os i maiores elementos esto ordenados

BubbleSort
Simulao de funcionamento http://math.hws.edu/TMCM/java/xSortLab

BubbleSort - Complexidade
Para um vetor de n elementos, n 1 varreduras so feitas para acertar todos os elementos
n=5 incio:

4 4 2 1 1 1

9 2 1 2 2 2

2 1 4 4 4 4

1 5 5 5 5 5

5 9 9 9 9 9

1a V: n 1 comparaes 2a V: n 2 comparaes ... (n-2)a V: 2 comparaes (n-1)a V: 1 comparao fim:

BubbleSort - Complexidade
Definida pelo nmero de comparaes envolvendo a quantidade de dados do vetor Nmero de comparaes: (n - 1) + (n 2) + ... + 2 + 1 Complexidade (para qualquer caso):
n-1 i=1

(n - 1) n 2

O(n2)

BubbleSort - Implementao
Classe OrdenadorBubbleSort SubClasse de Ordenador incio mtodo ordena(); incio i, j inteiro; para i de 0 at n-2 faa /* n-1 varreduras */ para j de 1 at n-1-i faa /* desconsidera elementos */ se vetor[ j -1 ] > vetor[ j ] ento /* a direita j ordenados */ troca( j - 1, j); /* a cada iterao */ fim; fim;

InsertionSort
InsertionSort um mtodo simples de insero Caractersticas do mtodo de insero
considera dois segmentos (sub-vetores) no vetor: ordenado (aumenta) e no-ordenado (diminui) ordena atravs da insero de um elemento por vez (primeiro elemento) do segmento noordenado no segmento ordenado, na sua posio correta

Mtodo de Insero
e5 e9 ... e8 e2
segmento ordenado segmento no-ordenado

e5

e8

e9

...

e2

Inicialmente, o segmento ordenado contm apenas o primeiro elemento do vetor

InsertionSort
realiza uma busca seqencial no segmento ordenado para inserir corretamente um elemento do segmento no-ordenado nesta busca, realiza trocas entre elementos adjacentes para ir acertando a posio do elemento a ser inserido
e5 e9 e8 ... e2

e5

e8

e9

...

e2

InsertionSort
Simulao de funcionamento http://math.hws.edu/TMCM/java/xSortLab

InsertionSort - Complexidade
Pior caso: vetor totalmente desordenado
n=5 1a V: 1 comparao 2a V: 2 comparaes ... (n-2)a V: n-2 comparaes (n-1)a V: n-1 comparaes n-1 i=1 incio:

9 5 4 2 1

5 9 5 4 2 O(n2)

4 4 9 5 4

2 2 2 9 5

1 1 1 1 9

(n - 1) n 2

InsertionSort - Complexidade
Melhor caso: vetor j ordenado
n=5 incio:

1 1 1 1 1

2 2 2 2 2

4 4 4 4 4

5 5 5 5 5

9 9 9 9 9

1a V: 1 comparao 2a V: 1 comparao ... (n-2)a V: 1 comparao (n-1)a V: 1 comparao n - 1 O(n)

10

InsertionSort X BubbleSort
Melhor caso InsertionSort O(n) BubbleSort O(n2) Pior caso O(n2) O(n2)

SelectionSort
SelectionSort um mtodo simples de seleo
ordena atravs de sucessivas selees do elemento de menor valor em um segmento noordenado e seu posicionamento no final de um segmento ordenado troca e2 e5 e8 ... e6

e2

e5

e6

...

e8

11

SelectionSort
Caracterstica particular
realiza uma busca seqencial pelo menor valor no segmento no-ordenado a cada iterao

Simulao de funcionamento http://math.hws.edu/TMCM/java/xSortLab

SelectionSort - Complexidade
Para qualquer caso
1a V: n-1 comparaes 2a V: n-2 comparaes troca

9 1 1

5 5 2 2 O(n2)

1 9 9 4

2 2 5 5

4 4 4 9

... (n-1)a V: 1 comparao n-1 i=1

(n - 1) n 2

12

Comparao
Melhor caso InsertionSort BubbleSort SelectionSort O(n) O(n2) O(n2) Pior caso O(n2) O(n2) O(n2)

Exerccios
Implementar o mtodo sort para uma subclasse OrdenadorInsertionSort da classe Ordenador Implementar o mtodo sort para uma subclasse OrdenadorSelectionSort da classe Ordenador Melhore a complexidade do BubbleSort de modo que ele encerre a sua execuo quando descobrir que o vetor j est ordenado

13

Você também pode gostar