You are on page 1of 11

Mtodos de Ordenao

Ordenao em memria primria

Objetivos
Dado um vetor de tamanho n, com ndices de 0 a n-1, onde cada posio possui uma chave de ordenao Um algoritmo de ordenao deve rearranjar o vetor de forma a estabeler uma ordem entre os elementos onde, para quaisquer elementos vi-1, vi vi-1 < vi , i = 1..n-1, considerando a chave de ordenao.

Vetor desordenado V de tamanho n = 5


0 1 2 3 4

10 1

Ordena(V,n) Vetor ordenado:


0 1 2 3 4

10

Mtodo da Seleo (Selection Sort)


Descrio: Seleciona sempre o menor elemento remanescente do conjunto no ordenado e move este elemento para sua posio correta Algoritmo
1. 2. Encontrar o menor elemento e trocar com o elemento na primeira posio do vetor Encontrar o segundo menor elemento e trocar com o elemento na segunda posio do vetor e assim sucessivamente...

Mtodo da Seleo
Exemplo:
algoritmo seleo (int a[], int n){ Para i da primeira posio at a penltima faca mnimo = i para j da posio seguinte a i at a ultima posio faa se (a[j] < a[mnimo] minimo =j; fim para fim para troca(a[mnimo],a[i]); fim algoritmo

{7,3,2,10,1} Para i =0, mnimo terminar com o valor 4, e o 1 ser trocado com o 7 {1,3,2,10,7} i=1, mnimo terminar com o valor 2, e o 2 ser trocado com o 3 {1,2,3,10,7} i= 2, mnimo terminar com o valor 4, e no haver troca i=3, mnimo terminar com o valor 4, e o 7 ser trocado com o 10 {1,2,3,7,10}

Mtodo da Insero
Descrio: Considera cada elemento uma vez inserindoo em seu lugar correto entre os elementos que j esto em ordem. (Usado para ordenar cartas de um baralho na mo do
jogador.)

Algoritmo:
1. O elemento inserido entre os ordenados movendo-se os elementos maiores que ele uma posio para a direita e posteriormente inserindo-o na posio vaga.

Mtodo da Insero (Insertion sort)


Algoritmo insercao(int A[], int n) para j do segundo elemento at o ltimo faa x = A[j]; i=j-1; enquanto (i >= 0 e A[i] > x) faa A[i+1]=A[i]; i = i-1; fim enquanto A[i+1]=x; fim para fim algoritmo Exemplo: {7,3,2,10,1} Para j = 1, o 7 empurrado uma posio e o 3 colocado na posio (i+1) = 0 {3,7,2,10,1} Para j =2, { 3,7} so empurrados uma posio e o 2 colocado na posio 0 {2,3,7,10,1} Para j=3, ningum empurrado e o 10 colocado na mesma posio onde estava {2,3,7,10,1} Para j =4, {2,3,7,10} so empurrados uma posio e o 1 inserido na posio 0: {1,2,3,7,10}

Mtodo da bolha (bouble sort)


Descrio: Consiste em percorrer o vetor trocando os elementos adjacentes caso necessrio.

O maior elemento vai subir (como um bolha) para a ltima posio do vetor.

Mtodo da Bolha
algoritmo bolha ( int a[],int n) Para i do ultimo elemento at o segundo faa para j do segundo elemento at i faa se (a[j-1]>a[j]) troca(&a[j-1],&a[j]); } Exemplo

i
4

j
1 2

A={7,3,2,10,1}
{3,7,2,10,1} {3,2,7,10,1}

3
4 3 1 2 3

{3,2,7,10,1}
{3,2,7,1,10} {2,3,7,1,10} {2,3,7,1,10} {2,3,1,7,10}

2
1

1
2 1

{2,3,1,7,10}
{2,1,3,7,10} {1,2,3,7,10}

Exerccio
Implementar os mtodos insero, seleo e bolha em C e fazer uma avaliao de desempenho dos mesmos

Usar a funo abaixo para gerar vetores aleatrios:


#include <math.h>
geravetor(int a[], int N){ int i; srand(time(NULL)); for (i=0;i<N;i++) a[i]= (rand()%N); }

Exerccios
Usar a funo ftime para medir o tempo. Exemplo:

#include<sys/timeb.h>
struct timeb ini, fim; ftime(&ini); // obtem o tempo no inicio Ordena(v,n); ftime(&fim); // obtem o tempo no final // Computa o tempo gasto e imprime printf("tempo gasto na ordenacao: %f segundos \n", ((double) fim.time + ((double) fim.millitm * 0.001)) ((double) ini.time + ((double) ini.millitm * 0.001)));

Exerccios
a) Realizar testes com vetores de tamanho 20000, 40000, 60000, 80000, 100000, 150000, 200000, 250000, 300000, 350000, 400000 e 500000. Utilize um software de planilha para traar grficos que permitam visualizar e comporar o desempenho dos mtodos.

You might also like