







Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Trabalho desenvolvido para o entendimento sobre os métodos de ordenação.
Tipologia: Trabalhos
1 / 13
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Alisson Aparecido dos Santos
TÍTULO DO TRABALHO: Métodos de Ordenação
Alisson Aparecido dos Santos
TÍTULO DO TRABALHO: Métodos de Ordenação
Trabalho apresentado a disciplina de
Estrutura de dados II e Iniciação à
Pesquisa ao Prof. Especialista. Glauber
Alves de Oliveira como requisito parcial de
avaliação.
O trabalho tem a finalidade de trazer o entendimento sobre métodos de ordenação, que pode ser tanto voltado à programação ou não.·. Ordenar corresponde ao processo de rearranjar um conjunto de objetos em ordem ascendente ou descendente. O objetivo principal da ordenação é facilitar a recuperação posterior de itens do conjunto ordenado. A atividade de colocar as coisas em ordem está presente na maioria das aplicações em que os objetos armazenados têm de ser pesquisados e recuperados. Para melhor escolha de um método de ordenação é preciso saber sobre a natureza dos dados que serão processados. Entre elas destacam-se duas: Tempo de acesso a um elemento possibilidade de acesso direto a um elemento. Tempo de acesso: Uma estante de livros com seus títulos bem visíveis. Complexibilidade de para acesso: Uma pilha de livros dentro de uma caixa, onde precisamos tirar um a um para saber qual a sua natureza. Em termos computacionais utiliza-se Ordenação interna e ordenação Externa.
2.1. Ordenação Interna.
Externa processamento na memória interna. Custo principal o custo de transferir dados entre a memória interna e a memória externa.
a. Itens armazenados em fita magnética só podem ser acessados de forma sequencial.
b. (^) b Itens armazenados em disco magnético podem ser acessados diretamente, mas a um custo maior do que o custo para acessar sequencialmente, o que contraindica o uso do acesso direto.
2.3. BubleSort (Bolha)
É o método mais simples em termos de implementação, porém é o menos eciente.
A ideia principal do algoritmo é percorrer o vetor n 1 vezes, a cada passagem fazendo mutuar para o inicio o menor elemento da sequência. Essa movimentação, ilustrada na Figura 2.2, lembra a forma como as bolhas procuram seu próprio nível, por isso o nome do algoritmo. Seu uso não é recomendado para vetores com muitos elementos
EXEMPLO:
1º elem. 2º elem. 3º elem. 4º elem. 5º elem. 6º elem. 7º elem.
1ª comparação
12 9 13 10 3 2 5
1ª troca – 2ª comparação
9 12 13 10 3 2 5
Troca não efetuada - 3ª comparação
9 12 13 10 3 2 5
2ª troca – 4ª comparação
9 12 10 13 3 2 5
3ª troca – 5ª comparação
9 10 12 13 3 2 5
Exemplo de algoritmo #include
using namespace std;
typedef int seqnum[10];
void bubble(seqnum &lista){ int percorre, maximo, aux; for (maximo = 9; maximo >= 1; maximo--){ for (percorre=1; percorre <= maximo; percorre++){ if (lista[percorre] > lista[percorre+1]){ aux = lista[percorre]; lista[percorre] = lista[percorre+1]; lista[percorre+1] = aux; } } } }
int main(){ seqnum lista; int i;
typedef int lista[MAXIMO];
void PrintVet (lista vetor ) { int contador;
for( contador = 0; contador < MAXIMO; contador++) { cout << "vetor[" << contador << "] = " << vetor[contador] << endl; } }
/* divide o vetor em dois, com metade abaixo do numero retornado menor que ele e a metade acima do numero retornado maior que ele */ int separa (lista vetor, int inicio, int fim) { int aux_troca, valor_pivo, pos_inic, pos_final;
valor_pivo = vetor[inicio]; pos_inic = inicio+1; pos_final = fim;
while (pos_inic <= pos_final) { if (vetor[pos_inic] <= valor_pivo) { pos_inic++; } else { if (valor_pivo < vetor[pos_final]) { pos_final--; } else { aux_troca = vetor[pos_inic]; vetor[pos_inic] = vetor[pos_final]; vetor[pos_final] = aux_troca; pos_inic++; pos_final--; } } }
// colocando o valor do pivo em pos_final aux_troca = vetor[inicio]; vetor[inicio] = vetor[pos_final]; vetor[pos_final] = aux_troca;
return( pos_final ); }
/* Ordena um vetor da posicao inicio ate a posicao fim */ void quicksort (lista vetor, int inicio, int fim) { int pivo;
cout << "Entrando quicksort entre "<< inicio << " e " << fim << endl; PrintVet(vetor);
if (inicio < fim) { pivo = separa (vetor, inicio, fim); cout <<"Pivo definido = "<< pivo << "\nVetor apos separacao\n"<< endl; PrintVet(vetor);
/* neste momento, os valores abaixo do pivo sao menores e os valores acima do pivo sao maiores que ele */
quicksort (vetor, inicio, pivo-1); /* recursivamente para os menores que o pivo / quicksort (vetor, pivo+1, fim); / recursivamente para os maiores que o pivo */ } }
int main() { lista vetor; int contador;
printf("Digite o valor dos numeros\n***************\n"); for( contador = 0; contador<MAXIMO; contador++ ) { cout << "\nvetor[" << contador<<"]: "; cin >> vetor[contador]; }
cout << "\nPrimeira sequencia\n"; PrintVet( vetor );
quicksort( vetor, 0, MAXIMO-1 ); system("PAUSE"); }
2.5. ShellSort
Este algoritmo é uma extensão do método InsertShort proposto por Donald Shell em 1959. O algoritmo de inserção troca itens adjacentes quando está procurando o ponto de inserção na sequência destino. Se o menor item estiver na posição mais à direita no vetor, então o número de comparações e movimentações é iguala n 1 para encontra o seu ponto de
shellsort(a,n);
printf("\nArray After Sorting : "); for(i=0;i< n;i++) printf("%5d",a[i]); getch(); return 0; }
http://pt.wikibooks.org/wiki/Algoritmos_e_Estruturas_de_Dados/ Algoritmos_de_Ordena%C3%A7%C3%A3o. http://www.decom.ufop.br/menotti/aedI082/tps/tp3-sol1.pdf http://www.univasf.edu.br/~marcelo.linder/arquivos_aed2/aulas/aula16.pdf http://www2.dcc.ufmg.br/disciplinas/aeds2_turmaA1/cap4.pdf http://cppgm.blogspot.com.br/2008/02/shell-sort.html