1. Faculdade de Tecnologia de
Presidente Prudente
Algorítmo de Ordenação
Análise e Desenvolvimento de Sistemas
3º Módulo
2. O que é?
Algoritmo que coloca os elementos de uma
dada sequência em uma certa ordem onde as
mais usadas são a numérica e a lexicográfica.
3. Lexigráfica
Analisa a entrada de linhas de caracteres e
produz uma seqüência chamada de "símbolos
léxicos" (lexical tokens), ou somente "símbolos"
(tokens).
4. Shellsort
(Diminuição de incrementos)
• Criado por Donald Shell em 1959, publicado
pela Universidade de Cincinnati.
• Mais eficiente algoritmo de classificação
dentre os de complexidade quadrática.
• É um refinamento do método de inserção
direta.
5. Código em C
void shellSort(int * vet, int size) {
int i , j , value;
int gap = 1;
do {
gap = 3*gap+1;
} while(gap < size);
do {
gap /= 3;
for(i = gap; i < size; i++) {
value =vet[i];
j = i - gap;
while (j >= 0 && value < vet[j]) {
vet [j + gap] =vet[j];
j -= gap;
}
vet [j + gap] = value;
}
} while ( gap > 1);
}
8. Mergesort
(Fusão)
• É um exemplo de algoritmo de ordenação do tipo
dividir-para-conquistar.
• Criar uma sequência ordenada a partir de duas
outras também ordenadas dividindo a sequência
original em pares de dados, ordena-as; depois as
agrupa em sequências de quatro elementos, e
assim por diante, até ter toda a sequência
dividida em apenas duas partes. (resumir este
tópico)
• Os três passos úteis do algoritmo são: dividir,
conquistar e combinar.
9. Vantagem
Algoritmo de ordenação de simples
implementação e fácil entendimento utilizando
chamadas recursivas.
10. Desvantagem
Alto consumo de memória, devido a série de
chamadas recursivas.
11. Código em C
void mergesort(int begin, int end) for(i = begin;i <= end;i++)
{ {
int left = 0, right = 0, middle if(right > end ||
= 0; (left <= middle && A[left] <=
int i = 0; A[right]))
{
if(begin == end) B[i] =
return; A[left];
left++;
middle = (begin + end)/2; }
else
mergesort(begin,middle); {
mergesort(middle + 1,end); B[i] =
A[right];
right++;
left = begin; }
right = middle + 1; }
for(i = begin;i <= end;i++)
A[i] = B[i];
}
12.
13. Quicksort
(Rápido)
• Método de ordenação muito rápido e
eficiente, inventado por C.A.R. Hoare em
1960.
• Foi criado para tentar traduzir um dicionário
de inglês para russo, ordenando as palavras.
• O Quicksort é um algoritmo de ordenação por
comparação não-estável.
14. Como funciona?
O Quicksort adota a estratégia de divisão e
conquista que consiste em rearranjar as chaves
de modo que as chaves "menores" precedam as
chaves "maiores".
15. C++
#include <algorithm>
#include <iterator>
#include <functional>
using namespace std;
template <typename T>
void sort(T begin, T end) {
if (begin != end) {
T middle = partition (begin, end,
bind2nd(less<iterator_traits<T>::value_type>(), *begin));
sort (begin, middle);
sort (max(begin + 1, middle), end);
}
}