Escolar Documentos
Profissional Documentos
Cultura Documentos
Ouro Preto
14 de novembro de 2008
Sumrio
1 Introduo
2 Mtodos de Ordenao
2.1 Mtodos de Ordenao Interna . .
2.1.1 Implementao dos mtodos
2.2 BubbleSort . . . . . . . . . . . . .
2.2.1 Implementao . . . . . . .
2.2.2 Estudo da Complexidade . .
2.2.3 Anlise do algoritmo . . . .
2.3 InsertSort . . . . . . . . . . . . . .
2.3.1 Implementao . . . . . . .
2.3.2 Estudo da Complexidade . .
2.3.3 Anlise do algoritmo . . . .
2.4 SelectSort . . . . . . . . . . . . . .
2.4.1 Implementao . . . . . . .
2.4.2 Estudo da Complexidade . .
2.4.3 Anlise do algoritmo . . . .
2.5 ShellSort . . . . . . . . . . . . . . .
2.5.1 Implementao . . . . . . .
2.5.2 Estudo da Complexidade . .
2.5.3 Anlise do algoritmo . . . .
2.6 QuickSort . . . . . . . . . . . . . .
2.6.1 Implementao . . . . . . .
2.6.2 Estudo da Complexidade . .
2.6.3 Anlise do algoritmo . . . .
2.7 HeapSort . . . . . . . . . . . . . . .
2.7.1 Implementao . . . . . . .
2.7.2 Estudo da Complexidade . .
2.7.3 Anlise do algoritmo . . . .
2.8 MergeSort . . . . . . . . . . . . . .
2.8.1 Implementao . . . . . . .
2.8.2 Estudo da Complexidade . .
2.8.3 Anlise do algoritmo . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
3
3
6
7
8
9
10
11
12
13
14
15
16
16
18
19
20
20
21
21
23
24
25
27
28
28
29
30
31
31
3 Testes
3.1 Metodologia dos Testes . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.1 Vetor ordenado em ordem crescente . . . . . . . . . . . . . . .
32
32
33
34
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
37
40
43
46
46
48
50
52
4 Concluso
54
A CTimer
56
B Operations
57
60
Lista de Tabelas
2.1
2.2
2.3
2.4
2.5
2.6
2.7
.
.
.
.
.
.
.
9
13
17
20
24
28
31
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
34
34
37
37
40
40
43
43
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Lista de Figuras
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
6
7
10
10
14
18
21
25
27
29
. 35
. 35
. 36
. 36
. 38
. 38
. 39
. 39
. 41
. 41
. 42
. 42
. 44
44
45
45
46
46
48
48
50
50
52
52
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
4
4
5
7
11
15
19
22
22
23
26
26
30
31
32
56
57
61
62
63
64
65
66
67
Captulo 1
Introduo
Em vrios momentos do dia a dia, o homem depara-se com a necessidade de consultar dados ordenados. Como exemplo, pode-se citar uma lista telefnica. Imagine
como seria consultar o telefone de uma pessoa se os nomes no estivessem classicados em ordem alfabtica. Por isso uma das atividades mais utilizada na computao
a ordenao.
As ordens mais utilizadas so as nmericas e as lexicogrcas.
Existem diversos algoritmos para ordenao interna. No presente trabalho ser
apresentada a implementao e os testes de sete destes mtodos.
BubbleSort
InsertSort
SelectSort
ShellSort
QuickSort
HeapSort
MergeSort
Os testes foram realizados com vetores de nmeros inteiros de diferentes tamanhos (100, 1000, 10000 e 100000 ) e tipos (ordenados em ordem crescente e decres-
cente, aleatrios e parcialmente ordenados com apenas 10% dos elementos fora da
ordem ).
Como medidas para a comparao entre os mtodos foi colhido durante cada
teste:
1. Nmero de comparaes entre chaves do vetor;
2. Nmero de movimentaes;
3. Contagem do tempo gasto durante a execuo do algoritmo;
Captulo 2
Mtodos de Ordenao
Ordenar corresponde ao processo de rearranjar um conjunto de objetos
em ordem ascendente ou descendente. O objetivo principal da ordenao
facilitar a recuperao posterior de itens do conjunto ordenado. ...A
atividade de colocar as coisas em ordem est presente na maioria das
aplicaes em que os objetos armazenados tm de ser pesquisados e recuperados... [19]
A comparao feita atravs de uma determinada chave, para este trabalho a
chave escolhida foi um valor inteiro. O Programa 2.1 apresenta a estrutura do tipo
Item (implementado na classe Types) que armazenado pelos Vetores.
typedef long
typedef struct
TKey ;
TKey
TItem {
Key ;
} TItem ;
Um mtodo dito estvel se a ordem relativa dos itens com a mesma chave no
se altera durante o processo de ordenao. A Figura 2.1 exemplica os mtodos
estveis e instveis de ordenao.
1. BubbleSort
2. InsertSort
3. SelectSort
Mtodos ecientes:
1.
2.
3.
4.
2.1.1
ShellSort
QuickSort
HeapSort
MergeSort
#ifndef
#define
#include
#include
class
private
double
double
double
void
void
void
void
void
void
public
_SORTMETHODS_
_SORTMETHODS_
"CTimer . h"
" Types . h"
SortMethods {
mComparations ;
mMoviments ;
mTime ;
long
long
long
long
long
long
long
long
ClearAll () ;
Partition (
ReMake (
Left ,
Left ,
B u i l d ( TItem
Array ,
MethodQuick (
Merge ( TItem
Right ,
Right ,
long
TItem
long
i ,
Array ) ;
TItem
A) ;
n) ;
Left ,
Array ,
long
Right ,
Left ,
TItem
A) ;
Means ,
long
Right ) ;
void
void
void
void
void
void
void
double
double
double
#endif
long
long
long
long
long
long
long
SortMethods ( ) ;
Array ,
Array ,
I n s e r t S o r t ( TItem A r r a y ,
S h e l l S o r t ( TItem A r r a y ,
Q u i c k S o r t ( TItem A r r a y ,
H e a p S o r t ( TItem A r r a y ,
M e r g e S o r t ( TItem A r r a y ,
B u b b l e S o r t ( TItem
S e l e c t S o r t ( TItem
n) ;
n) ;
n) ;
n) ;
n) ;
n) ;
n) ;
getTime ( ) ;
getComparations ( ) ;
getMoviments ( ) ;
};
As variveis mComparations, mMoviments e mTime, tem como nalidade armazenar o nmero de comparaes, movimentos e tempo gasto, respectivamente,
em cada execuo de um mtodo de ordenao.
O procedimento ClearAll(), apresentada no Programa 2.3 chamado a cada
vez que um mtodo iniciado. Esta funo zera os valores das variveis de medio.
void
this
this
this
SortMethods : : C l e a r A l l ( ) {
>m C o m p a r a t i o n s
>mMoviments =
>mTime =
0;
0;
0;
ordenao;
double getComparations():
chaves;
double
return this
SortMethods : : getTime ( ) {
>mTime ;
double
return this
SortMethods : : getComparations ( ) {
>m C o m p a r a t i o n s ;
double
return this
SortMethods : : getMoviments ( ) {
>mMoviments ;
2.2
BubbleSort
Implementao
void
long
S o r t M e t h o d s : : B u b b l e S o r t ( TItem
i ,
TItem
new
aux ;
Timer
this
for
for
this
if
this
this
this
CTimer
Array ,
j ;
CTimer ( ) ;
>C l e a r A l l ( ) ;
Timer
>s t a r t ( ) ;
< n
j
1 ;
n i
<
i++
;
){
j++
){
>m C o m p a r a t i o n s++;
aux
A r r a y [ j ] . Key <
=
Array [ j
1 ] . Key ) {
Array [ j ] ;
>mMoviments++;
Array [ j ]
Array [ j
1];
>mMoviments++;
Array [ j
1]
aux ;
>mMoviments++;
}
}
}
>s t o p ( )
this
Timer
>mTime =
;
Timer
>g e t E l a p s e d T i m e ( )
long
n){
Estudo da Complexidade
=
=
n2
X
ni1
X
i=0
j=1
=
=
=
n2
X
(n i 1)
i=0
n2
X
i=0
n2
X
i=0
n2
X
i=0
(0 + n 2)(n 1)
(n 1)
n(n 1)
2
(n2 3n + 2)
n2 n
(n 1)
2
2n2 2n n2 + 3n 2 2n + 2
2
2
n n
2
Ordem de Complexidade:
(2.1)
O(n2 )
M (n) = 3 C(n)
2
n n
= 3
2
2
3n 3n
=
2
Ordem de Complexidade:
2.2.3
(2.2)
O(n2 )
Anlise do algoritmo
Desvantagens
- O fato de o arquivo j estar ordenado
no ajuda em nada [7];
- Ordem de complexidade quadrtica;
- Algoritmo Estvel;
2.3
InsertSort
2.3.1
Implementao
A colocao do item no seu lugar correto na sequncia ordenanda, como demonstra o Programa 2.6, realizada movendo os ndices de maiores valores para direita
e ento inserindo o item na posio vazia.
Programa 2.6: Mtodo InsertSort.
void
long
S o r t M e t h o d s : : I n s e r t S o r t ( TItem
Array ,
long
n){
i , j ;
TItem
aux ;
Timer
this
for
this
this
while
this
CTimer
new
CTimer ( ) ;
>C l e a r A l l ( ) ;
Timer
>s t a r t ( ) ;
( i
aux
1;
<
n;
i ++){
Array [ i ] ;
>mMoviments++;
1;
>m C o m p a r a t i o n s++;
(
Array [ j
>=
1]
Array [ j ] ;
&&
A r r a y [ j ] . Key
){
>mMoviments++;
this
Array [ j
1]
aux ;
>mMoviments++;
>s t o p ( )
this
Timer
>mTime =
;
Timer
>g e t E l a p s e d T i m e ( )
2.3.2
Estudo da Complexidade
n1
i
X
X
i=1
!
1
j=1
n1
X
=
(i)
i=1
(n 1)(1 + n 1
=
2
(n 1)(n)
=
2
2
n n
=
2
Ordem de Complexidade:
(2.3)
O(n2 )
n1
X
2+
i=1
=
=
i
X
!
1
j=1
n1
X
(2 + i)
i=1
n1
X
2+
i=1
n1
X
i=1
(n 1)(1 + n 1
2
(n 1)(n)
(2n 2) +
2
(n2 n)
(2n 2) +
2
2
4n 4 + n n
2
n2 + 3n 4
2
2
n + 3n
2
2
= 2(n 1) +
=
=
=
=
=
Ordem de Complexidade:
O(n2 )
12
(2.4)
2.3.3
Anlise do algoritmo
O InsertSort tambm um mtodo de simples implementao, e tem a complexidade igual ao BubbleSort . Pode ser aprimorado com o uso de sentinela e outras
tcnicas de algoritmos. o melhor mtodo para se utilizar quando os arquivos j
esto quase ordenados [7].
A Tabela 2.2 apresenta as principais vantagens e desvantagens deste mtodo.
Vantagens
Desvantagens
- Fcil Implementao
- Nmero grande de movimentaes
- Algoritmo Estvel
- Ordem de complexidade quadrtica
- O vetor j ordenado favorece a orde- - Ineciente quando o vetor est ordenao
nado inversamente;
13
2.4
SelectSort
14
2.4.1
Implementao
A colocao do item no seu lugar correto na sequncia ordenanda, como demonstra o Programa 2.7 realizada trocando o item de menor valor pela primeira posio
do vetor.
Programa 2.7: Mtodo SelectSort.
void
long
S o r t M e t h o d s : : S e l e c t S o r t ( TItem
i ,
TItem
j ,
aux ;
Timer
this
for
for
this
if
CTimer
Array ,
long
n){
Min ;
new
CTimer ( ) ;
>C l e a r A l l ( ) ;
Timer
>s t a r t ( ) ;
( i
Min =
0;
<
1;
i ++){
i ;
( j
<
n;
j ++){
>m C o m p a r a t i o n s++;
A r r a y [ j ] . Key <
Min =
A r r a y [ Min ] . Key )
j ;
this
this
this
aux
A r r a y [ Min ] ;
>mMoviments++;
A r r a y [ Min ]
Array [ i ] ;
>mMoviments++;
Array [ i ]
aux ;
>mMoviments++;
>s t o p ( )
this
Timer
>mTime =
;
Timer
>g e t E l a p s e d T i m e ( )
15
2.4.2
Estudo da Complexidade
C(n) =
=
=
n2
X
ni1
X
i=0
j=1
n2
X
i=0
n2
X
=
=
=
(n i 1)
n
i=0
n2
X
i=0
n2
X
i=0
(0 + n 2)(n 1)
(n 1)
n(n 1)
2
(n2 3n + 2)
2
n n
(n 1)
2
2n2 2n n2 + 3n 2 2n + 2
2
n2 n
2
Ordem de Complexidade:
(2.5)
O(n2 )
C(n) =
n1
X
i=1
= 3(n 1)
= 3n 3
(2.6)
Ordem de Complexidade:
2.4.3
O(n)
Anlise do algoritmo
O SelectSort um mtodo muito simples. Alm disso, o algoritmo de seleo apesenta um comportamento espetacular quanto ao nmero de movimentos
de registros, cujo tempo de execuo linear, esta particularidade dicilmente encontrada em outros algoritmos de ordenao [19]. o algoritmo ideal para arquivos
com registros muito grandes [1].
A Tabela 2.3 apresenta as principais vantagens e desvantagens deste mtodo.
16
Vantagens
- Fcil Implementao
Desvantagens
- O fato de o arquivo j estar ordenado
no inuencia em nada
- Ordem de complexidade quadrtica
- Algoritmo no estvel
17
2.5
ShellSort
2.5.1
Implementao
O diferencial do ShellSort a diviso em h intervalos que ele realiza para posteriomente aplicar o mtodo de insero. Vrias sequncias para h tm sido experimentadas. Knuth(1973) mostrou experimentalmente que a escolha do incremento
para h, mostrada a seguir na Equao 2.7 dicil de ser batida em mais de 20% dos
casos em ecincia no tempo de execuo [19].
h(s > 1) = 3h(s 1) + 1
h(s = 1) = 1
(2.7)
A implementao utilizando este calculo para h apresentada no Programa 2.8.
void
int
int
Array ,
long
n){
j ;
h =
TItem
1;
new
aux ;
Timer
this
do
while
do
for
this
this
while
this
this
if
break
CTimer
CTimer ( ) ;
>C l e a r A l l ( ) ;
Timer
>s t a r t ( ) ;
h = h
(h <
1;
n) ;
/=
3;
aux
= h
<
i++
){
Array [ i ] ;
>mMoviments++;
i ;
>m C o m p a r a t i o n s++;
( Array [ j
h ] . Key >
aux . Key ) {
>m C o m p a r a t i o n s++;
Array [ j ]
Array [ j
h ];
>mMoviments++;
= h;
( j
<
h)
;
this
while
this
Array [ j ]
aux ;
>mMoviments++;
Timer
(h
!=
1) ;
>s t o p ( ) ;
>mTime =
Timer
>g e t E l a p s e d T i m e ( )
Estudo da Complexidade
O estudo da complexidade deste algoritmo contm alguns problemas matemticos muito difceis, a comear pela prpria sequencia de incrementos para h.
De acordo com testes empricos utilizando a Formula 2.7 para o calculo dos incrementos, a ordem de complexidade do ShellSort de aproximadamente O(n1 , 25)
ou O(n(log n)2 ) [?].
2.5.3
Anlise do algoritmo
arquivos
Desvantagens
- Algoritmo no estvel
de - Tempo de execuo sensvel ordem
inicial do arquivo [11]
20
2.6
QuickSort
Implementao
estar particionado em uma parte esquerda com chaves menores ou iguais ao piv e
outra maiores ou iguais [19].
A implementao do mtodo Partition apresentado no Programa 2.9, para
a escolha do piv foi implementada a variao mediana de trs, em que o pivo
escolhido usando a mediana entre a chave mais esquerda, a chave mais direita e
a chave central [18].
Programa 2.9: Mtodo Partition utilizado pelo QuickSort.
void
TItem
i
j
do
long
SortMethods : : P a r t i t i o n (
Array ) {
TItem
aux1 ,
Left ,
long
Right ,
long
long
aux2 ;
Left ;
Right ;
aux1
Array [ (
j ) /2];
this
while
this
>m C o m p a r a t i o n s++;
( a u x 1 . Key >
Array [
i ] . Key ) {
>m C o m p a r a t i o n s++;
i ) ++;
this
while
this
>m C o m p a r a t i o n s++;
( a u x 1 . Key <
Array [
] . Key ) {
>m C o m p a r a t i o n s++;
if
j ) ;
<=
this
this
this
aux2
j ){
Array [
i ];
>mMoviments++;
Array [
i ]
Array [
];
>mMoviments++;
Array [
j ]
aux2 ;
>mMoviments++;
(
(
i ) ++;
j ) ;
while
}
<=
j) ;
void
long
if
if
S o r t M e t h o d s : : MethodQuick (
P a r t i t i o n ( Left ,
( Left
<
Left ,
long
Right ,
TItem
Array ) {
Right ,
<
&i ,
&j ,
Array ) ;
j )
MethodQuick ( L e f t ,
( i
long
i , j ;
j ,
Array ) ;
Right )
MethodQuick ( i ,
Right ,
Array ) ;
void
this
this
this
new
S o r t M e t h o d s : : Q u i c k S o r t ( TItem
CTimer
Timer
Array ,
long
n){
CTimer ( ) ;
>C l e a r A l l ( ) ;
Timer
>s t a r t ( ) ;
>MethodQuick ( 0 , n
Timer
1 , A r r a y ) ;
>s t o p ( ) ;
>mTime =
Timer
>g e t E l a p s e d T i m e ( )
2.6.2
Estudo da Complexidade
C(n) = n log n n + 1
(2.8)
No caso mdio o nmero de compaes apresentado na Equao 2.9, signicando assim que a sua ordem de complexidade O(n log n).
C(n) = 1, 386n log n 0, 84n
(2.9)
2.6.3
Anlise do algoritmo
Desvantagens
- Tem um pior caso de O(n2 )
- Implementao difcil
- No estvel
24
2.7
HeapSort
25
void
long
long
S o r t M e t h o d s : : ReMake (
i
aux ;
long
Right ,
TItem
Array ) {
2;
while
if
this
if
aux
Left ,
j ;
TItem
=
long
Left ;
Array [ i ] ;
( j
( j
<=
<
Right ) {
Right ) {
>m C o m p a r a t i o n s++;
( A r r a y [ j ] . Key <
A r r a y [ j + 1 ] . Key )
j ++;
this
if
break
>m C o m p a r a t i o n s++;
Array [ i ]
i
Array [ j ] ;
j ;
this
j
A r r a y [ j ] . Key )
>mMoviments++;
this
void
long
while
Array [ i ]
aux ;
>mMoviments++;
S o r t M e t h o d s : : B u i l d ( TItem
Left
Array ,
long
n){
Left ;
= n
( Left
>
1;
1)
Left
ReMake ( L e f t ,
n,
Array ) ;
}
}
void
long
S o r t M e t h o d s : : H e a p S o r t ( TItem
Left ,
TItem
aux ;
this
this
Timer
Left
0;
CTimer
Array ,
Right ;
new
CTimer ( ) ;
>C l e a r A l l ( ) ;
Timer
>s t a r t ( ) ;
>B u i l d ( A r r a y ,
=
while
Right
aux
= n
1;
( Right
=
n) ;
>
0) {
Array [ 0 ] ;
Array [ 0 ]
this
this
this
Array [ Right ] ;
Array [ Right ]
aux ;
>mMoviments++;
Right
>ReMake ( L e f t ,
Timer
Right ,
Array ) ; }
>s t o p ( ) ;
>mTime =
Timer
>g e t E l a p s e d T i m e ( ) ; }
26
long
n){
2.7.1
Implementao
7. A cada comparao incrementa a varivel mComparations e a cada movimentao incrementa a varivel mMoviments;
8. Pausa a contagem de tempo e calcula o tempo gasto armazenando o valor na
varivel mTime;
2.7.2
Estudo da Complexidade
caso.
2.7.3
Anlise do algoritmo
primeira vista, o algoritmo no parece eciente, pois as chaves so movimentadas vrias vezes. Entretanto, ele gasta um tempo de execuo proporcional a
n log n no pior caso [19].
Ele no recomendado para vetores com poucos elementos por causa do tempo
gasto na construo do heap , sendo recomendado para aplicaes que no podem
tolerar eventualmente um caso desfavorvel [8].
A Tabela 2.6 apresenta as principais vantagens e desvantagens deste mtodo.
Vantagens
- Tempo n log n
Desvantagens
- O anel interno do algoritmo bastante
complexo se comparado ao Quicksort .
- No estvel
28
2.8
MergeSort
outro algoritmo de ordenao do tipo dividir para conquistar. Sua idia bsica
criar uma sequncia ordenada a partir de duas outras tambm ordenadas. Para
isso, ele divide a sequncia original em pares de dados, ordena-as; depois as agrupa
em sequncias de quatro elementos, e assim por diante, at ter toda a sequncia
dividida em apenas duas partes, como ilustrado na Figura 2.14 [15].
and con-
2.8.1
Implementao
void
S o r t M e t h o d s : : Merge ( TItem
Array ,
long
Left ,
long
ArrayAux
TItem
( TItem
) malloc
( ( Right
L e f t )
Means ,
long
Right
( TItem ) ) ;
i , j ,k;
= Means ;
Left ;
while
this
this
if
else
k =
long
sizeof
0;
( i
<
Means &&
<
Right )
>mMoviments++;
>m C o m p a r a t i o n s++;
( A r r a y [ i ] . Key <=
A r r a y [ j ] . Key )
ArrayAux [ k++] =
Array [ i ++];
ArrayAux [ k++] =
Array [ j ++];
while
this
while
this
for
this
( i
<
Means ) {
ArrayAux [ k++] =
Array [ i ++];
>mMoviments++;
( j
<
Right ) {
ArrayAux [ k++] =
Array [ j ++];
>mMoviments++;
( i
Left ;
Array [ i ]
<
Right ;
ArrayAux [ i
++i ) {
L e f t
];
>mMoviments++;
}
free
( ArrayAux ) ;
30
void
this
long
long
while
while
if
this
new
S o r t M e t h o d s : : M e r g e S o r t ( TItem
CTimer
Timer
Array ,
long
n){
CTimer ( ) ;
>C l e a r A l l ( ) ;
Timer
>s t a r t ( ) ;
Left ,
Right ;
Means = 1 ;
( Means <
Left
( Left
Right
n){
0;
+ Means <
Left
( Right
Right
>
n)
= n;
>Merge ( A r r a y ,
Left
n){
Means ;
Left
Left ,
L e f t+Means ,
Right ) ;
Means ;
}
Means =
Means ;
>s t o p ( )
this
Timer
>mTime =
;
Timer
>g e t E l a p s e d T i m e ( )
2.8.2
Estudo da Complexidade
Anlise do algoritmo
31
Captulo 3
Testes
Neste captulo so apresentados os resultados dos testes realizados com 4 tipos
de vetores e 4 tamanhos diferentes. A anlise dos resultados so feitos na Seo 3.3
3.1
100
OrdC
10000
100
OrdP
Insert
532
Insert
1000
OrdA
OrdD
OrdA
0
0
3.2
Resultados
Foram testados os sete mtodos de ordenao, para cada mtodo foi testado um
tamanho diferente de vetor (100, 1000, 10000, 100000) e para cada tamanho um
tipo diferente (Ordenado Crescente, Ordenado Decrescente, Ordenado Aleatrio e
parcialmente Aleatrio). Para o tipo Aleatrio o teste foi realizado para 10 vetores
diferentes, assim o resultado aqui apresentado a mdia dos valores. Os resultados
dos 364 testes sero apresentados em quatro grupos, divididos pelo tipo do Vetor.
Os mtodos sero numerados para apresentao na tabela, conforme a lista abaixo:
1. BubbleSort
2. InsertSort
3. SelectSort
4. ShellSort
5. QuickSort
6. HeapSort
7. MergeSort
Tambm seram utilizados as seguintes abreviaes para os tipos de vetores:
OrdC: Vetor ordenado em ordem crescente;
OrdD: Vetor ordenado em ordem decrescente;
OrdP: Vetor parcialmente ordenado(10% aleatrio);
OrdA: Vetor aleatrio;
33
3.2.1
1
2
3
4
5
6
7
Vetor Ordenado em
100
1000
1 0,000050 0,004822
2 0,000003 0,00002
3 0,000050 0,004834
4 0,000008 0,000108
5 0,000020 0,000191
6 0,000033 0,000412
7 0,000150 0,001487
Ordem Crescente
10000
100000
0,483164 48,373736
0,000193 0,001936
0,561589 58,300695
0,001453 0,018899
0,002403 0,028667
0,008299 0,083919
0,015855 0,205009
34
35
36
3.2.2
1
2
3
4
5
6
7
Vetor Ordenado
100
1000
Comp. Mov. Comp. Mov.
4950
4950 499500 499500
99
5148
999
501498
4950
297 499500 2997
572
914
9377
14834
610
336
9016
303
1125
747
17952 10811
316
1376
4932
19968
em Ordem Decrescente
10000
100000
Comp.
Mov.
Comp.
Mov.
4999500 4999500 4999950000 4999950000
9999
50014998
9999
500014999
49995000
29997
4999950000
299997
128947
204190
1586800
2553946
125452
32712
1600030
346602
246705
141975
3131748
1747201
64608
272640
815024
3385984
37
38
39
3.2.3
1
2
3
4
5
6
7
1
2
3
4
5
6
7
Vetor
100
0,000052
0,000007
0,000050
0,000012
0,000029
0,000035
0,000143
Parcialmente Ordenado
1000
10000
100000
0,005348 0,526686 58,175386
0,000379 0,046328 4,601265
0,004834 0,561589 58,300695
0,000236 0,003399 0,055055
0,000309 0,003792 0,045093
0,000405 0,004734 0,088935
0,001518 0,023147 0,221169
40
41
42
3.2.4
Vetor aleatrio
1
2
3
4
5
6
7
Vetor Aleatrio
100
1000
10000
100000
Comp. Mov. Comp. Mov. Comp.
Mov.
Comp.
Mov.
4950
2628 499500 242827 49995000 25160491 4999950000 2499136980
99
2387
999
253364
9999
25012754
99999
2500402956
4950
297 499500 2997 49995000
29997
4999950000
299997
818
1160 14364 19821
236735
311978
3711435
4670697
997
570
12852
8136
181203
103575
2114943
1310586
1205
817
18837 11556
255288
149150
3220006
1825075
558
1376
8744
19968
123685
272640
1566749
3385984
1
2
3
4
5
6
7
100
0,000076
0,000027
0,000050
0,000016
0,000031
0,000034
0,00015
Vetor Aleatrio
1000
10000
100000
0,008084 0,858684 114,840058
0,002531 0,323982 31,500937
0,004834 0,561589 58,300695
0,000290 0,006158 0,104286
0,000403 0,004987 0,084427
0,000420 0,009227 0,087964
0,001598 0,019384 0,231564
43
44
45
3.3
3.3.1
Figura 3.18: Tempo gasto pelos mtodos nos quatro tamanhos de vetores propostos.
Conforme os grcos podemos observar que:
O InsertSort a escolha ideal para um vetor que ja est ordenado, indepen-
46
47
3.3.2
Figura 3.20: Tempo gasto pelos mtodos nos quatro tamanhos de vetores propostos.
Conforme os grcos podemos observar que:
Para arquivos ordenados inversamente de at 10000 elementos o ShellSort
dos inversamente.
execuo.
49
3.3.3
Figura 3.22: Tempo gasto pelos mtodos nos quatro tamanhos de vetores propostos.
Conforme os grcos podemos observar que:
O ShellSort e QuickSort so os melhores para este tipo de vetor em qualquer
do tamanho.
50
execuo.
51
3.3.4
Vetor aleatrio
Figura 3.24: Tempo gasto pelos mtodos nos quatro tamanhos de vetores propostos.
Conforme os grcos podemos observar que:
Para pequenos arquivos o ShellSort foi o melhor, para os maiores o QuickSort
execuo.
53
Captulo 4
Concluso
Foram apresentados sete mtodos de ordenao interna mediante a comparao de chaves. A Seo 3 aprentou os dados de 364 testes realizados utilizando
esses mtodos. Aps o estudo desses resultados e dos algoritmos, so apresentadas
observaes sobre cada um dos mtodos.
1.
BubbleSort :
2.
InsertSort :
SelectSort :
ShellSort :
mentos aumenta;
Em todas as situae manteve-se prximo do algoritmo mais rpido do
teste;
54
5.
QuickSort :
6.
HeapSort :
ao ShellSort .
7.
MergeSort :
cientes;
Em todos testes com 100 elementos apresentou um tempo de execuo
maior que os algoritmos O(n2 );
Pelos testes realizados, conclui-se que a escolha de um algoritmo de ordenao
depende do tipo de vetor e tamanho a ser ordenado.
Uma alternativa para obter um desempenho melhor a combinao de mtodos.
Por exemplo, suponha um algoritmo de ordenao composto pelo mtodo QuickSort e InsertSort. O algoritmo verica o tamanho do vetor a ser ordenado e em
seguida aplica o QuickSort se o arquivo for grande e aleatrio ou aplica o InsertSort se o arquivo for pequeno e parcialmente ordenado.
Conclui-se tambm que mtodos ecientes, demandam uma implementao mais
cautelosa do cdigo, pois so detalhes que denem a qualidade da operao de
ordenao
55
Apndice A
CTimer
Implementao da classe CTimer utilizada para a medio do tempo de execuo
dos algoritmos de ordenao.
#include
#include
CTimer : : CTimer ( ) {
t S t a r t . QuadPart
t S t o p . QuadPart
0;
0;
double
L I T o S e c s (LARGE_INTEGER
LARGE_INTEGER
L) {
frequency ;
return double
QueryPerformanceFrequency (
((
double
&f r e q u e n c y
) L >QuadPart
/(
) f r e q u e n c y . QuadPart )
void
CTimer : : s t a r t ( ) {
Q u e r y P e r f o r m a n c e C o u n t e r (&
this
>t S t a r t ) ;
void
CTimer : : s t o p ( ) {
Q u e r y P e r f o r m a n c e C o u n t e r (&
this
>t S t o p ) ;
double
CTimer : : g e t E l a p s e d T i m e ( ) {
LARGE_INTEGER
return
t i m e . QuadPart
this
time ;
=
>t S t o p . QuadPart
L I T o S e c s (& t i m e ) ;
56
this
>t S t a r t . QuadPart ;
Apndice B
Operations
Foi implementado 3 mtodos auxiliares para a realizao dos testes. So eles:
GeneratingArray: Gera vetores no tamanho e tipo passados como argumento.
OrdC(Type 0):
OrdD(Type 1):
OrdA(Type 2):
OrdP(Type 3):
long
int
< s t d l i b . h>
<t i m e . h>
<i o s t r e a m >
std ;
TItem
GeneratingArray (
TItem
srand ( (
Array
( TItem
int
sizeof
mItens ,
) malloc (
) t i m e (NULL) ) ;
57
Type ) {
( TItem )
mItens ) ;
switch
case
for
break
case
int
for
break
case
for
break
case
for
if
( Type ) {
long
0:{
(
i =0;
i <m I t e n s ;
A r r a y [ i ] . Key =
i ++)
i ;
1:{
long
p =0;
(
i =m I t e n s
1;
A r r a y [ p + + ] . Key =
i >=0;
i ;
long
2:{
(
i =0;
long
i <m I t e n s ;
A r r a y [ i ] . Key =
i ++)
) rand ( )
mItens ;
long
do
while
else
3:{
(
i =0;
i <m I t e n s ;
i ++){
( i %10==0)
A r r a y [ i ] . Key =
long
( A r r a y [ i ] . Key ==
A r r a y [ i ] . Key =
) rand ( )
mItens ;
i ) ;
i ;
}
}
return
Array ;
void
long
"=================================="
for long
P r i n t A r r a y ( TItem
cout
Array ,
mItens ) {
<<
i =0;
i <m I t e n s ;
i ++){
cout . width ( 6 ) ;
cout
<<
A r r a y [ i ] . Key ;
cout
<<
" |";
}
cout
<<
"=================================="
<<
endl ;
TCommand
ProcessCommand (
char
StrCommand ) {
TCommand CommandTemp ;
s s c a n f ( StrCommand ,
"%s %d %s %d" ,
CommandTemp . m I t e n s ,
return
CommandTemp . Method ,
CommandTemp . TypeArray ,
&
&CommandTemp .
Print ) ;
CommandTemp ;
void
ProcessFile (
FILE
pFile ;
char
f o p e n _ s (& p F i l e ,
FILE
if
FileIn
FileIn ,
char
FileOut ) {
"r") ;
pFile2 ;
f o p e n _ s (& p F i l e 2 ,
return
char
FileOut ,
"w" ) ;
( p F i l e==NULL)
;
TCommand Command ;
buffer [200];
sprintf ( buffer ,
58
int
int
while
fputs ( buffer ,
pFile2 ) ;
type ;
i =1;
SortMethods
Sort
new
SortMethods ( ) ;
Command = ProcessCommand ( b u f f e r ) ;
if
else if
else if
else if
( s t r c m p ( Command . TypeArray ,
type
type
type
type
if
( s t r c m p ( Command . TypeArray ,
==
0)
"OrdD" )
==
0)
"OrdA" )
==
0)
"OrdP" )
==
0)
1;
( s t r c m p ( Command . TypeArray ,
2;
( s t r c m p ( Command . TypeArray ,
3;
Array
TItem
"OrdC" )
0;
G e n e r a t i n g A r r a y ( Command . m I t e n s ,
type ) ;
( Command . P r i n t )
P r i n t A r r a y ( Array ,
if
else
else
else
else
else
else
Command . m I t e n s ) ;
" B u b b l e " ) == 0 )
>B u b b l e S o r t ( A r r a y , Command . m I t e n s ) ;
( s t r c m p ( Command . Method , " I n s e r t " ) == 0 )
S o r t > I n s e r t S o r t ( A r r a y , Command . m I t e n s ) ;
( s t r c m p ( Command . Method , " S e l e c t " )== 0 )
S o r t > S e l e c t S o r t ( A r r a y , Command . m I t e n s ) ;
( s t r c m p ( Command . Method , " S h e l l " ) == 0 )
S o r t > S h e l l S o r t ( A r r a y , Command . m I t e n s ) ;
( s t r c m p ( Command . Method , " Quick " ) == 0 )
S o r t >Q u i c k S o r t ( A r r a y , Command . m I t e n s ) ;
( s t r c m p ( Command . Method , "Heap" ) == 0 )
S o r t >H e a p S o r t ( A r r a y , Command . m I t e n s ) ;
( s t r c m p ( Command . Method , "Merge" ) == 0 )
S o r t >M e r g e S o r t ( A r r a y , Command . m I t e n s ) ;
( s t r c m p ( Command . Method ,
if
if
if
if
if
if
Sort
if
( Command . P r i n t )
P r i n t A r r a y ( Array ,
Command . m I t e n s ) ;
sprintf ( buffer ,
. Method ,
Command . m I t e n s ,
cout
<<
"teste "
<<
i++ <<
endl ;
}
f c l o s e ( pFile ) ;
f c l o s e ( pFile2 ) ;
}
59
Apndice C
Arquivos de sada contendo os
resultados
Arquivos do tipo texto contendo os resultados dos seguintes testes realizados.
BubbleSort para 4 tipos de vetor e 4 tamanhos diferentes;
InsertSort para 4 tipos de vetor e 4 tamanhos diferentes;
SelectSort para 4 tipos de vetor e 4 tamanhos diferentes;
ShellSort para 4 tipos de vetor e 4 tamanhos diferentes;
QuickSort para 4 tipos de vetor e 4 tamanhos diferentes;
HeapSort para 4 tipos de vetor e 4 tamanhos diferentes;
MergeSort para 4 tipos de vetor e 4 tamanhos diferentes;
60
Quant
Type
Bubble
100
OrdC
Bubble
100
OrdD
Bubble
100
OrdP
Bubble
100
Bubble
100
Bubble
mComp .
mMovim .
mTime
4950
0.000050
4950
4950
0.000077
4950
328
0.000052
OrdA
4950
2628
0.000074
OrdA
4950
2628
0.000076
100
OrdA
4950
2628
0.000076
Bubble
100
OrdA
4950
2628
0.000075
Bubble
100
OrdA
4950
2628
0.000076
Bubble
100
OrdA
4950
2628
0.000076
Bubble
100
OrdA
4950
2628
0.000076
Bubble
100
OrdA
4950
2628
0.000076
Bubble
100
OrdA
4950
2628
0.000075
Bubble
100
OrdA
4950
2628
0.000076
Bubble
1000
OrdC
499500
0.004822
Bubble
1000
OrdD
499500
499500
0.007503
Bubble
1000
OrdP
499500
35450
0.005348
Bubble
1000
OrdA
499500
242827
0.008302
Bubble
1000
OrdA
499500
242827
0.008245
Bubble
1000
OrdA
499500
242827
0.008085
Bubble
1000
OrdA
499500
242827
0.008087
Bubble
1000
OrdA
499500
242827
0.008113
Bubble
1000
OrdA
499500
242827
0.008084
Bubble
1000
OrdA
499500
242827
0.008138
Bubble
1000
OrdA
499500
242827
0.008082
Bubble
1000
OrdA
499500
242827
0.008081
Bubble
1000
OrdA
499500
242827
0.008237
Bubble
10000
OrdC
49995000
0.483164
Bubble
10000
OrdD
49995000
49995000
0.752961
Bubble
10000
OrdP
49995000
3154687
0.526686
Bubble
10000
OrdA
49995000
24768116
0.853146
Bubble
10000
OrdA
49995000
24768116
0.851169
Bubble
10000
OrdA
49995000
25320916
0.859995
Bubble
10000
OrdA
49995000
25087802
0.856508
Bubble
10000
OrdA
49995000
25011848
0.863044
Bubble
10000
OrdA
49995000
25160491
0.858684
Bubble
10000
OrdA
49995000
24831680
0.858342
Bubble
10000
OrdA
49995000
25022032
0.854665
Bubble
10000
OrdA
49995000
25022032
0.855867
Bubble
10000
OrdA
49995000
25333035
0.857315
Bubble
100000
OrdC
4999950000
48.373736
Bubble
100000
OrdD
4999950000
4999950000
79.834753
Bubble
100000
OrdP
4999950000
359774720
58.175386
Bubble
100000
OrdA
4999950000
2503337665
107.334751
Bubble
100000
OrdA
4999950000
2499304061
107.940812
Bubble
100000
OrdA
4999950000
2491137250
110.872767
Bubble
100000
OrdA
4999950000
2498844837
111.346239
Bubble
100000
OrdA
4999950000
2505224085
110.317295
Bubble
100000
OrdA
4999950000
2496906642
109.635236
Bubble
100000
OrdA
4999950000
2504213408
108.712391
Bubble
100000
OrdA
4999950000
2498470030
121.313059
Bubble
100000
OrdA
4999950000
2488891637
120.359626
Bubble
100000
OrdA
4999950000
2499136980
117.840058
61
Quant
Type
mComp .
Insert
100
OrdC
99
198
Insert
100
OrdD
99
5148
0.000056
Insert
100
OrdP
99
528
0.000007
Insert
100
OrdA
99
2387
0.000027
Insert
100
OrdA
99
2387
0.000027
Insert
100
OrdA
99
2387
0.000027
Insert
100
OrdA
99
2387
0.000027
Insert
100
OrdA
99
2387
0.000027
Insert
100
OrdA
99
2387
0.000027
Insert
100
OrdA
99
2387
0.000027
Insert
100
OrdA
99
2387
0.000027
Insert
100
OrdA
99
2387
0.000027
Insert
100
OrdA
99
2387
0.000027
Insert
1000
OrdC
999
1998
0.000020
Insert
1000
OrdD
999
501498
0.004897
Insert
1000
OrdP
999
34527
0.000379
Insert
1000
OrdA
999
253364
0.002623
Insert
1000
OrdA
999
253364
0.002568
Insert
1000
OrdA
999
253364
0.002535
Insert
1000
OrdA
999
253364
0.002533
Insert
1000
OrdA
999
253364
0.002540
Insert
1000
OrdA
999
253364
0.002532
Insert
1000
OrdA
999
253364
0.002531
Insert
1000
OrdA
999
253364
0.002531
Insert
1000
OrdA
999
253364
0.002579
Insert
1000
OrdA
999
253364
0.002554
Insert
10000
OrdC
9999
19998
0.000193
Insert
10000
OrdD
9999
50014998
0.667281
Insert
10000
OrdP
9999
3410635
0.046328
Insert
10000
OrdA
9999
24919368
0.362001
Insert
10000
OrdA
9999
25048430
0.325466
Insert
10000
OrdA
9999
25048430
0.313694
Insert
10000
OrdA
9999
25048430
0.332196
Insert
10000
OrdA
9999
25048430
0.336111
Insert
10000
OrdA
9999
24977078
0.323982
Insert
10000
OrdA
9999
24977078
0.341779
Insert
10000
OrdA
9999
24977078
0.320963
Insert
10000
OrdA
9999
25002784
0.345760
Insert
10000
OrdA
9999
25002784
0.325827
Insert
100000
OrdC
99999
199998
0.001936
Insert
100000
OrdD
99999
5000149998
64.038128
Insert
100000
OrdP
99999
360932382
4.601265
Insert
100000
OrdA
99999
2500686937
31.768194
Insert
100000
OrdA
99999
2502664733
32.525120
Insert
100000
OrdA
99999
2500905360
31.451376
Insert
100000
OrdA
99999
2500402956
31.500937
Insert
100000
OrdA
99999
2503185261
31.822204
Insert
100000
OrdA
99999
2496615174
31.373653
Insert
100000
OrdA
99999
2488758797
31.469461
Insert
100000
OrdA
99999
2494440950
31.235527
Insert
100000
OrdA
99999
2497932586
31.412962
Insert
100000
OrdA
99999
2502987729
31.172520
62
mMovim .
mTime
0.000003
Quant
Type
Select
100
OrdC
Select
100
OrdD
Select
100
OrdP
Select
100
Select
100
Select
mComp .
mMovim .
mTime
4950
297
0.000050
4950
297
0.000052
4950
297
0.000051
OrdA
4950
297
0.000054
OrdA
4950
297
0.000055
100
OrdA
4950
297
0.000054
Select
100
OrdA
4950
297
0.000055
Select
100
OrdA
4950
297
0.000054
Select
100
OrdA
4950
297
0.000054
Select
100
OrdA
4950
297
0.000054
Select
100
OrdA
4950
297
0.000054
Select
100
OrdA
4950
297
0.000054
Select
100
OrdA
4950
297
0.000054
Select
1000
OrdC
499500
2997
0.004834
Select
1000
OrdD
499500
2997
0.004845
Select
1000
OrdP
499500
2997
0.006082
Select
1000
OrdA
499500
2997
0.005201
Select
1000
OrdA
499500
2997
0.005203
Select
1000
OrdA
499500
2997
0.006150
Select
1000
OrdA
499500
2997
0.005179
Select
1000
OrdA
499500
2997
0.004896
Select
1000
OrdA
499500
2997
0.004917
Select
1000
OrdA
499500
2997
0.004914
Select
1000
OrdA
499500
2997
0.004916
Select
1000
OrdA
499500
2997
0.004897
Select
1000
OrdA
499500
2997
0.004918
Select
10000
OrdC
49995000
29997
0.561589
Select
10000
OrdD
49995000
29997
0.588332
Select
10000
OrdP
49995000
29997
0.569411
Select
10000
OrdA
49995000
29997
0.554237
Select
10000
OrdA
49995000
29997
0.597913
Select
10000
OrdA
49995000
29997
0.556050
Select
10000
OrdA
49995000
29997
0.568910
Select
10000
OrdA
49995000
29997
0.609064
Select
10000
OrdA
49995000
29997
0.569972
Select
10000
OrdA
49995000
29997
0.589663
Select
10000
OrdA
49995000
29997
0.579552
Select
10000
OrdA
49995000
29997
0.576273
Select
10000
OrdA
49995000
29997
0.603351
Select
100000
OrdC
4999950000
299997
58.300695
Select
100000
OrdD
4999950000
299997
59.014263
Select
100000
OrdP
4999950000
299997
58.884310
Select
100000
OrdA
4999950000
299997
58.460898
Select
100000
OrdA
4999950000
299997
58.640138
Select
100000
OrdA
4999950000
299997
61.302155
Select
100000
OrdA
4999950000
299997
60.813733
Select
100000
OrdA
4999950000
299997
60.557073
Select
100000
OrdA
4999950000
299997
60.472528
Select
100000
OrdA
4999950000
299997
61.323460
Select
100000
OrdA
4999950000
299997
61.482899
Select
100000
OrdA
4999950000
299997
61.434110
Select
100000
OrdA
4999950000
299997
61.445988
63
Quant
Type
mComp .
mMovim .
mTime
Shell
100
OrdC
342
684
0.000008
Shell
100
OrdD
572
914
0.000011
Shell
100
OrdP
509
851
0.000012
Shell
100
OrdA
818
1160
0.000019
Shell
100
OrdA
818
1160
0.000016
Shell
100
OrdA
818
1160
0.000016
Shell
100
OrdA
818
1160
0.000017
Shell
100
OrdA
818
1160
0.000016
Shell
100
OrdA
818
1160
0.000016
Shell
100
OrdA
818
1160
0.000017
Shell
100
OrdA
818
1160
0.000015
Shell
100
OrdA
818
1160
0.000016
Shell
100
OrdA
818
1160
0.000016
Shell
1000
OrdC
5457
10914
0.000108
Shell
1000
OrdD
9377
14834
0.000164
Shell
1000
OrdP
10857
16314
0.000236
Shell
1000
OrdA
14364
19821
0.000293
Shell
1000
OrdA
14364
19821
0.000302
Shell
1000
OrdA
14364
19821
0.000300
Shell
1000
OrdA
14364
19821
0.000291
Shell
1000
OrdA
14364
19821
0.000289
Shell
1000
OrdA
14364
19821
0.000290
Shell
1000
OrdA
14364
19821
0.000297
Shell
1000
OrdA
14364
19821
0.000297
Shell
1000
OrdA
14364
19821
0.000296
Shell
1000
OrdA
14364
19821
0.000291
Shell
10000
OrdC
75243
150486
0.001453
Shell
10000
OrdD
128947
204190
0.002120
Shell
10000
OrdP
172528
247771
0.003399
Shell
10000
OrdA
236735
311978
0.004624
Shell
10000
OrdA
236735
311978
0.004745
Shell
10000
OrdA
236735
311978
0.007572
Shell
10000
OrdA
236735
311978
0.004385
Shell
10000
OrdA
236735
311978
0.004452
Shell
10000
OrdA
236735
311978
0.004395
Shell
10000
OrdA
236735
311978
0.004638
Shell
10000
OrdA
236735
311978
0.007667
Shell
10000
OrdA
236735
311978
0.004455
Shell
10000
OrdA
236735
311978
0.004624
Shell
100000
OrdC
967146
1934292
0.018899
Shell
100000
OrdD
1586800
2553946
0.037005
Shell
100000
OrdP
2214898
3182044
0.055055
Shell
100000
OrdA
3702551
4669697
0.105380
Shell
100000
OrdA
3702551
4669697
0.100341
Shell
100000
OrdA
3702551
4669697
0.111791
Shell
100000
OrdA
3702551
4669697
0.104286
Shell
100000
OrdA
3720319
4687465
0.067776
Shell
100000
OrdA
3720319
4687465
0.075897
Shell
100000
OrdA
3720319
4687465
0.080078
Shell
100000
OrdA
3720319
4687465
0.077610
Shell
100000
OrdA
3720319
4687465
0.104269
Shell
100000
OrdA
3720319
4687465
0.097616
64
Quant
Type
mComp .
mMovim .
mTime
Quick
100
OrdC
606
189
0.000020
Quick
100
OrdD
610
336
0.000022
Quick
100
OrdP
727
324
0.000029
Quick
100
OrdA
997
570
0.000035
Quick
100
OrdA
997
570
0.000033
Quick
100
OrdA
997
570
0.000032
Quick
100
OrdA
997
570
0.000032
Quick
100
OrdA
997
570
0.000032
Quick
100
OrdA
997
570
0.000032
Quick
100
OrdA
997
570
0.000031
Quick
100
OrdA
997
570
0.000031
Quick
100
OrdA
997
570
0.000032
Quick
100
OrdA
997
570
0.000032
Quick
1000
OrdC
9009
1533
0.000191
Quick
1000
OrdD
9016
3030
0.000197
Quick
1000
OrdP
10725
3522
0.000309
Quick
1000
OrdA
12852
8136
0.000409
Quick
1000
OrdA
12852
8136
0.000398
Quick
1000
OrdA
12852
8136
0.000404
Quick
1000
OrdA
12852
8136
0.000397
Quick
1000
OrdA
12852
8136
0.000403
Quick
1000
OrdA
12852
8136
0.000396
Quick
1000
OrdA
12852
8136
0.000404
Quick
1000
OrdA
12852
8136
0.000396
Quick
1000
OrdA
12852
8136
0.000404
Quick
1000
OrdA
12852
8136
0.000400
Quick
10000
OrdC
125439
17712
0.002403
Quick
10000
OrdD
125452
32712
0.002531
Quick
10000
OrdP
157689
66225
0.003792
Quick
10000
OrdA
181203
103575
0.004968
Quick
10000
OrdA
181203
103575
0.004840
Quick
10000
OrdA
181203
103575
0.004932
Quick
10000
OrdA
181203
103575
0.004946
Quick
10000
OrdA
181203
103575
0.004929
Quick
10000
OrdA
181203
103575
0.004967
Quick
10000
OrdA
181203
103575
0.005176
Quick
10000
OrdA
181203
103575
0.004931
Quick
10000
OrdA
181203
103575
0.004929
Quick
10000
OrdA
181203
103575
0.004987
Quick
100000
OrdC
1600016
196605
0.028667
Quick
100000
OrdD
1600030
346602
0.029437
Quick
100000
OrdP
2251124
903300
0.045093
Quick
100000
OrdA
2137184
1311831
0.081911
Quick
100000
OrdA
2137184
1311831
0.069456
Quick
100000
OrdA
2114943
1310586
0.054217
Quick
100000
OrdA
2114943
1310586
0.055759
Quick
100000
OrdA
2114943
1310586
0.063946
Quick
100000
OrdA
2114943
1310586
0.062869
Quick
100000
OrdA
2114943
1310586
0.084427
Quick
100000
OrdA
2114943
1310586
0.097758
Quick
100000
OrdA
2114943
1310586
0.098938
Quick
100000
OrdA
2114943
1310586
0.090165
65
Quant
Type
mComp .
mMovim .
mTime
Heap
100
OrdC
1265
884
0.000033
Heap
100
OrdD
1125
747
0.000032
Heap
100
OrdP
1254
868
0.000035
Heap
100
OrdA
1205
817
0.000034
Heap
100
OrdA
1205
817
0.000035
Heap
100
OrdA
1205
817
0.000034
Heap
100
OrdA
1205
817
0.000034
Heap
100
OrdA
1205
817
0.000034
Heap
100
OrdA
1205
817
0.000033
Heap
100
OrdA
1205
817
0.000035
Heap
100
OrdA
1205
817
0.000034
Heap
100
OrdA
1205
817
0.000034
Heap
100
OrdA
1205
817
0.000034
Heap
1000
OrdC
19562
12192
0.000412
Heap
1000
OrdD
17952
10811
0.000381
Heap
1000
OrdP
19525
12190
0.000405
Heap
1000
OrdA
18837
11556
0.000422
Heap
1000
OrdA
18837
11556
0.000420
Heap
1000
OrdA
18837
11556
0.000420
Heap
1000
OrdA
18837
11556
0.000420
Heap
1000
OrdA
18837
11556
0.000423
Heap
1000
OrdA
18837
11556
0.000426
Heap
1000
OrdA
18837
11556
0.000419
Heap
1000
OrdA
18837
11556
0.000419
Heap
1000
OrdA
18837
11556
0.000419
Heap
1000
OrdA
18837
11556
0.000419
Heap
10000
OrdC
264433
156928
0.008299
Heap
10000
OrdD
246705
141975
0.007504
Heap
10000
OrdP
264737
156489
0.004734
Heap
10000
OrdA
255288
149150
0.005324
Heap
10000
OrdA
255288
149150
0.005187
Heap
10000
OrdA
255288
149150
0.008293
Heap
10000
OrdA
255288
149150
0.008269
Heap
10000
OrdA
255288
149150
0.009227
Heap
10000
OrdA
255288
149150
0.011361
Heap
10000
OrdA
255288
149150
0.009188
Heap
10000
OrdA
255288
149150
0.010626
Heap
10000
OrdA
255288
149150
0.010120
Heap
10000
OrdA
255288
149150
0.010692
Heap
100000
OrdC
3312482
1900842
0.083919
Heap
100000
OrdD
3131748
1747201
0.084207
Heap
100000
OrdP
3294503
1887739
0.088935
Heap
100000
OrdA
3220006
1825075
0.079565
Heap
100000
OrdA
3220006
1825075
0.099474
Heap
100000
OrdA
3220006
1825075
0.102175
Heap
100000
OrdA
3220006
1825075
0.087964
Heap
100000
OrdA
3220006
1825075
0.072352
Heap
100000
OrdA
3220006
1825075
0.077337
Heap
100000
OrdA
3220006
1825075
0.073631
Heap
100000
OrdA
3220006
1825075
0.089448
Heap
100000
OrdA
3220006
1825075
0.090158
Heap
100000
OrdA
3220006
1825075
0.070367
66
Quant
Type
MComp .
MMovim .
MTime
Merge
100
OrdC
372
1376
Merge
100
OrdD
316
1376
0.000141
Merge
100
OrdP
505
1376
0.000143
Merge
100
OrdA
558
1376
0.000148
Merge
100
OrdA
558
1376
0.000147
Merge
100
OrdA
558
1376
0.000147
Merge
100
OrdA
558
1376
0.000147
Merge
100
OrdA
558
1376
0.000151
Merge
100
OrdA
558
1376
0.000150
Merge
100
OrdA
558
1376
0.000150
Merge
100
OrdA
558
1376
0.000150
Merge
100
OrdA
558
1376
0.000150
Merge
100
OrdA
558
1376
0.000150
Merge
1000
OrdC
5052
19968
0.001487
Merge
1000
OrdD
4932
19968
0.001495
Merge
1000
OrdP
7869
19968
0.001518
Merge
1000
OrdA
8744
19968
0.001598
Merge
1000
OrdA
8744
19968
0.001597
Merge
1000
OrdA
8744
19968
0.001601
Merge
1000
OrdA
8744
19968
0.001598
Merge
1000
OrdA
8744
19968
0.001690
Merge
1000
OrdA
8744
19968
0.001609
Merge
1000
OrdA
8744
19968
0.001605
Merge
1000
OrdA
8744
19968
0.001601
Merge
1000
OrdA
8744
19968
0.001603
Merge
1000
OrdA
8744
19968
0.001599
Merge
10000
OrdC
71712
272640
0.015855
Merge
10000
OrdD
64608
272640
0.016313
Merge
10000
OrdP
114410
272640
0.023147
Merge
10000
OrdA
123685
272640
0.029013
Merge
10000
OrdA
123685
272640
0.017560
Merge
10000
OrdA
123685
272640
0.017046
Merge
10000
OrdA
123685
272640
0.017231
Merge
10000
OrdA
123685
272640
0.017340
Merge
10000
OrdA
123685
272640
0.024817
Merge
10000
OrdA
123685
272640
0.016881
Merge
10000
OrdA
123685
272640
0.018917
Merge
10000
OrdA
123685
272640
0.017271
Merge
10000
OrdA
123685
272640
0.019384
Merge
100000
OrdC
877968
3385984
0.205009
Merge
100000
OrdD
815024
3385984
0.219894
Merge
100000
OrdP
1106062
3385984
0.221169
Merge
100000
OrdA
1566362
3385984
0.265624
Merge
100000
OrdA
1566362
3385984
0.243212
Merge
100000
OrdA
1566362
3385984
0.227766
Merge
100000
OrdA
1566362
3385984
0.233699
Merge
100000
OrdA
1566330
3385984
0.203184
Merge
100000
OrdA
1566330
3385984
0.253517
Merge
100000
OrdA
1566330
3385984
0.258494
Merge
100000
OrdA
1566330
3385984
0.265600
Merge
100000
OrdA
1566749
3385984
0.231564
Merge
100000
OrdA
1566749
3385984
0.250193
67
0.000158
Referncias Bibliogrcas
[1] Ricardo Annes. Ordenao por seleo, 2008. http://pucrs.campus2.br/
~annes/alg3_ord_sel.
[2] Jos Elias C. Arroyo. Inf111 - programao ii, aulas 11, 12, 13 - ordenao,
2007. www.dpi.ufv.br/disciplinas/inf111/2006_2/Ordenacao1.pdf.
[3] Julio Cesar de Andrade Vieira Lopes. Heap, 2005. www.abusar.org/ftp/pub/
pitanga/Heap.pdf.
[4] Thales Castelo Branco de Castro.
http://www.nuperc.unifacs.br/Members/thales.castro/arquivos/
aulas/Ordenacao%20Interna.ppt.
Visual Book, So
Algorithms.
69
em C++ e Java.