Bucket Sort
Gabriel C.S.
EDA0001 – TADS – 2013
UDESC – Joinville
Consiste em dividir os elementos do vetor
a ser ordenado em baldes, ordenando
primeiramente o conteúdo dos baldes, e
depois agrupando os elementos.
 Melhor caso, Complexidade Linear, O(n).
 Pior caso, Quadrático,
O(n²).

Definição
BUCKET SORT(A, n)
 para i ← 1 até n faça
 insira A[i] na lista ligada B[⌊n A[i]⌋]
 para i ← 0 até n − 1 faça
 ordene a lista B[i] com algum algoritmo de
ordenação
 5 Concatene as listas B[0], B[1], . . . ,B[n − 1]

Pseudocódigo

http://www.cs.usfca.edu/~galles/visualiza
tion/BucketSort.html
Exemplo




Vantagens:
Não realiza comparações
É estável, preserva a ordem de chaves iguais
Tempo Linear


Desvantagens:
Precisa de mais memória para ordenar o
conjunto
O algoritmo se torna muito caro quando o
vetor chave é muito extenso

Vantagens e Desvantagens
Explique com suas palavras o algoritmo
Bucket Sort, e demonstre com um
exemplo
 Insira 10 números em um vetor e faça a
ordenação dele utilizando o Bucket Sort e
o Bubble Sort como ordenação dos
buckets.

Exercícios Sugeridos
Counting Sort
Lucas Casas
EDA0001 – TADS – 2013
UDESC – Joinville
 Vantagens:
Ordena vetores em tempo linear
 Não realiza comparações
 É um algoritmo de ordenação estável

 Desvantagens:

Usa 2 outros vetores na ordenação,
utilizando mais espaço na memória
Vantagens e Desvantagens

Esta forma de ordenação pressupõe que
cada elemento dentro do vetor “a” é um
inteiro entre 1 e k (k = maior inteiro do
vetor).

A ideia é saber para cada elemento x do
vetor, quantos elementos são iguais ou
inferiores a x.
Funcionamento







Recebe o vetor “a” (que possui os valores
desordenados)
Cria vetor cnt[MaiorValor(a)+1] e
b[tamanho(a)]
Inicializa todas as posições de cnt = 0.
Percorre o vetor “a”, para cada posição i de a
faz cnt[a[i]-1]++.
Acumula em cada elemento de cnt o
elemento somado ao elemento anterior.
Guarda em b os valores de a ordenados de
acordo com b[cnt[a[i]++]=a[i]
Copia “b” para “a”.
Funcionamento
countingsort(A[], B[], k)
for i = 1 to k do
C[i] = 0
for j = 1 to length(A) do
C[A[j]] = C[A[j]] + 1
for 2 = 1 to k do
C[i] = C[i] + C[i-1]
for j = 1 to length(A) do
B[C[A[j]]] = A[j]
C[A[j]] = C[A[j]] - 1
Pseudocódigo
 Recebe
um vetor de entrada, com os
valores desordenados
1
A=
2
2
5
3
3
4
0
5
2
6
3
7
0
8
3
 Então
gera um vetor B com o mesmo
tamanho de A
1
2
3
4
5
6
7
8
B=
E
um vetor C com o tamanho igual ao
maior elemento + 1
C=
0
1
2
3
0
0
0
0
Simulação
4
0
5
0
 Incrementamos
valores em A[i]
C=
 Depois
C[i] de acordo com os
0
1
2
3
2
0
2
3
4
0
5
1
fazemos C[i] = C[i] + C[i-1]
C=
0
1
2
3
2
2
4
7
Simulação
4
7
5
8
 Depois
fazemos B[C[A[i]]] = A[i], o que
vai colocar o valor de A[i] de forma
ordenada no vetor B
 Em seguida é feito o decremento de
C[A[i]]
C=
0
1
2
3
2
2
4
7
4
7
5
8
C[3] = C[3] – 1:
C=
0
1
2
3
2
2
4
6
Simulação
4
7
5
8
 Após
este ultimo passo o vetor B está
ordenado, podemos passar os valores
para o vetor A
B=

1
2
3
4
5
6
0
0
2
2
3
3
7
3
8
5
http://www.cs.usfca.edu/~galles/visualization/CountingSort.html
Simulação

Ordene o seguinte conjunto numérico
utilizando o Counting Sort:
{2, 3, 5, 3, 3, 3, 5, 6, 6, 6, 5, 5, 2, 2, 2, 7}

Para o vetor [3, 1, 2, 5, 4, 2, 2, 5], qual o
valor de k (tamanho do vetor C)?
Exercícios Sugeridos
Radix Sort
Vagner Pagotti
EDA0001 – TADS – 2013
UDESC – Joinville
radix quadratum 9 aequalis 3
=
base do quadrado 9 é igual a 3
Significado






Século XIX
Herman Hollerith (1860-1929)
Máquina de Tabulação de Cartões
Necessidade de ordenar as fichas
Harold H. Seward (1930–2012)
MIT – 1945 – Projeto Apollo
Origem
Complexidade
Notação
Significado
Constante
O(1)
Não varia com o número de entradas
Linear
O(n)
Varia linearmente
Logarítmica
O(log n)
Varia de forma logaritimica
Linearítimica
O(n log n)
Varia n vezes a variação logaritimica
Quadrática
O(n²)
Varia de forma quadrada
Radix Sort = O(n)
Classificação





Ordenação pela posição (LSB/MSB)
Algoritmo não comparativo
Algoritmo de complexidade linear
Complexidade de tempo = O(n.k)
Complexidade de espaço = O(n+s)
n = número de elementos
k = tamanho string
s = tamanho do alfabeto
Definição

Vantagens
◦ Baixa complexidade
◦ Execução rápida (linear)
◦ Estabilidade

Desvantagens
◦ Necessita mais memória
◦ Depende do tipo de dado
◦ Depende do valor máximo
Vantagens e Desvantagens
Entrada: V = vetor de inteiros
 Criar matriz de dígitos: D = matriz[10][*]
 Calcular Passos: P = número de dígitos do
maior de V
 Para cada passo:

◦ Para cada item de V:
 Calcular dígito do número (entre 0 a 9)
 Adicionar o número na matriz D[digito]
◦ Para cada item na matriz D:
 Colocar cada item no vetor V

Saida: vetor V ordenado
Algoritmo LSB - Numérico
LSB
Entrada
25
18
123
345
Passo 1
7
603
789
43
11
Passo 2
Passo 3
025
0
120
120
0
603
007
603
0
007
011
018
1
011
011
1
011
018
007
1
120
123
123
2
123
2
120
123
011
2
345
3
603
3
018
3
007
4
043
4
120
4
603
5
025
5
123
5
789
6
345
6
025
6
603
043
7
007
007
7
043
7
789
011
8
018
018
8
345
8
120
9
789
789
9
789
9
Saída
123
025
603
043
345
7
11
Exemplo
18
043
025
345
789
25
120
43
120
123
018
025
043
345
345
603
789



Entrada: V = vetor de strings, P = posição a
ser ordenada (inicialmente zero)
Criar matriz de string com uma posição para
cada caractere (ASCII): D = matriz[128][*]
Para cada item de V:
◦ Adicionar a string na matriz de acordo com o
caractere da posição informada: D[caractere]

Para cada item na matriz D:
◦ Se o vetor do caractere possuí mais de um item,
chamar a função recursivamente passando a lista
de itens do caractere e a posição informada + 1
◦ Colocar cada item no vetor V

Saida: vetor V ordenado
Algoritmo MSB – Lexicográfico
MSB
JATO
DADO
DEDO
PATO
LATA
D
F
J
L
M
P
ADO
OCA
ATO
ATA
AR
ATO
EDO
ACA
APA
D
A
E
DO
DO
MAR
FOCA
FACA
F
A
O
CA
CA
A
J
JA
DADO
DEDO
Exemplo
JAPA
A
TO
M
PA
Saída
MACA
ACA
Passo 3
Passo 2
Passo 1
Entrada
FACA
FOCA
JAPA
CA
P
T
A
O
JATO
R
LATA
MA
MACA
C
R
A
MAR
PATO
Construir uma função que recebe um
vetor de 10 inteiros e ordene os números
utilizando o algoritmo de ordenação
“Radix LSB”.
 Construir uma função que recebe uma
lista encadeada simples que contém itens
(tipo de informação) de valores inteiros e
ordene a lista com o algoritmo de
ordernação “Radix LSB”.

Exercícios Sugeridos
Download

Radix Sort