Professional Documents
Culture Documents
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.
10 1
10
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.
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
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.