1 / 11

Métodos de Ordenação

Métodos de Ordenação. Ordenação em memória primária. Dado um vetor de tamanho n, com índices de 0 a n-1, onde cada posição possui uma chave de ordenação

Download Presentation

Métodos de Ordenação

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Métodos de Ordenação Ordenação em memória primária

  2. Dado um vetor de tamanho n, com índices de 0 a n-1, onde cada posição possui uma chave de ordenação Um algoritmo de ordenação 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 ordenação. Objetivos Vetor desordenado V de tamanho n = 5 Ordena(V,n)  Vetor ordenado:

  3. Método da Seleção (Selection Sort) • Descrição:Seleciona sempre o menor elemento remanescente do conjunto não ordenado e move este elemento para sua posição correta • Algoritmo • Encontrar o menor elemento e trocar com o elemento na primeira posição do vetor • Encontrar o segundo menor elemento e trocar com o elemento na segunda posição do vetor e assim sucessivamente...

  4. algoritmo seleção (int a[], int n){ Para i da primeira posição até a penúltima faca mínimo = i para j da posição seguinte a i até a ultima posição faça se (a[j] < a[mínimo] minimo =j; fim para fim para troca(a[mínimo],a[i]); fim algoritmo Exemplo: {7,3,2,10,1} Para i =0, mínimo terminará com o valor 4, e o 1 será trocado com o 7 {1,3,2,10,7} i=1, mínimo terminará com o valor 2, e o 2 será trocado com o 3 {1,2,3,10,7} i= 2, mínimo terminará com o valor 4, e não haverá troca i=3, mínimo terminará com o valor 4, e o 7 será trocado com o 10 {1,2,3,7,10} Método da Seleção

  5. Método da Inserção • Descrição: Considera cada elemento uma vez inserindo-o em seu lugar correto entre os elementos que já estão em ordem. (Usado para ordenar cartas de um baralho na mão do jogador.) • Algoritmo: • O elemento é inserido entre os ordenados movendo-se os elementos maiores que ele uma posição para a direita e posteriormente inserindo-o na posição vaga.

  6. Algoritmo insercao(int A[], int n) para j do segundo elemento até o último faça x = A[j]; i=j-1; enquanto (i >= 0 e A[i] > x) faça 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 posição e o 3 é colocado na posição (i+1) = 0 {3,7,2,10,1} Para j =2, { 3,7} são empurrados uma posição e o 2 é colocado na posição 0 {2,3,7,10,1} Para j=3, ninguém é empurrado e o 10 é colocado na mesma posição onde estava {2,3,7,10,1} Para j =4, {2,3,7,10} são empurrados uma posição e o 1 é inserido na posição 0: {1,2,3,7,10} Método da Inserção (Insertion sort)

  7. Método da bolha (bouble sort) • Descrição: Consiste em percorrer o vetor trocando os elementos adjacentes caso necessário. • O maior elemento vai “subir” (como um bolha) para a última posição do vetor.

  8. algoritmo bolha ( int a[],int n) Para i do ultimo elemento até o segundo faça para j do segundo elemento até i faça se (a[j-1]>a[j]) troca(&a[j-1],&a[j]); } Exemplo Método da Bolha

  9. Exercício • Implementar os métodos inserção, seleção e bolha em C e fazer uma avaliação de desempenho dos mesmos Usar a função abaixo para gerar vetores aleatórios: #include <math.h> geravetor(int a[], int N){ int i; srand(time(NULL)); for (i=0;i<N;i++) a[i]= (rand()%N); }

  10. Exercícios Usar a função 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)));

  11. Exercícios • 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 traçar gráficos que permitam visualizar e comporar o desempenho dos métodos.

More Related