Ordenação em Tempo Linear

Propaganda
Ordenação em Tempo Linear
Algoritmos e Estuturas de Dados
Verão 2012
Cátia Vaz
1
Algoritmos de Ordenação
n 
insertion sort, selection sort, merge sort,
quicksort e heapsort são algoritmos de
ordenação baseados em comparações.
n 
n 
Ω (n lg n) é um limite inferior para algoritmos
de ordenação baseados em comparações.
counting sort e radix sort são algoritmos
de ordenação em “tempo linear” que
utilizam outras operações para determinar
a ordem de ordenação.
Cátia Vaz
2
Counting Sort
n 
n 
n 
n 
Assume que cada um dos n elementos do array A é um inteiro
entre 0...k
Se k = O(n), a ordenação é em tempo linear
Algoritmo:
n  Determina para cada elemento x o número de elementos
menores ou iguais;
n  Utiliza a informação anterior para colocar directamente
cada elemento x no array final;
Requer dois arrays:
n  Um array C com dimensão k, para contar o número de
elementos menores ou iguais;
n  Um array B com dimensão n, para colocar os elementos
ordenados.
Cátia Vaz
3
Counting Sort
C com dimensão k, em que C[k]
é atribuído o número de
elementos iguais k.
Actualiza C[k] com o número de
elementos menores ou iguais k.
Como os elementos podem ser
iguais, decrementa-se C[A[j]]
cada vez que se coloca um A[j]
no array B.
Cátia Vaz
4
Counting Sort
1
2
3
4
2
5
3
0
0
1
C
2
0
2
3
0
1
C
2
2
4
7
7
8
1
2
3
4
A
1
2
3
4
. . .
B
8
3
. . .
1
0
2
0
3
2
4
2
3
3
3
2
. . .
0
. . .
. . .
3
8
0
3
5
. . .
8
3
8
5
Cátia Vaz
5
Radix Sort
n 
Ideia do Algoritmo:
n 
n 
Ordenar primeiro o dígito menos significativo;
Para ordenar d dígitos:
Cátia Vaz
6
Radix-sort - análise
n 
Assumindo que se usa counting-sort
7
Download