Logo Passei Direto
Buscar

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

2011
Gerardo Valdisio Rodrigues Viana
Glauber Ferreira Cintra
Pesquisa e Ordenação de Dados
 !"#$%&'(
 ! "#$%&'!(!)'(*+#,-!.-!('.#%-/0(
 ! 1)'#2#%3-'!(2!,43(.(2!.#!5+-22&$5-/0(!&%3#'%-
 ! 1%-+&2-'!-!5(,)+#6&.-.#!.(2!-+7('&3,(2!.#!('.#%-/0(!
Ordenação Interna
Capítulo
2
21PESQUISA E ORDENAÇÃO DE DADOS
Apresentação
8#23#!5-)93:+(!&%&5&-,(2!.#$%&%.(!;(',-+,#%3#!(!)'(*+#,-!.-!('.#-
%-/0(!#!(2!)'&%5&)-&2!5'&34'&(2!.#!5+-22&$5-/0(!.#!.-.(2<!=,!2#7:&.->!-)'#-
2#%3-,(2! #,!.#3-+?#2! (2!,43(.(2! .#! ('.#%-/0(! &%3#'%->! .&25:3&%.(! 2:-!
#$5&@%5&-!#,!3#',(2!.#!5(%2:,(!.#!3#,)(!#!.#!,#,A'&-!#!(:3'(2!-2)#53(2!
'#+#B-%3#2<!8-!('.#,>!-*('.-'#,(2!(2!,43(.(2!C(+?->!D%2#'/0(!#!E#+#/0(!
F:#!20(!*-23-%3#!2&,)+#2!#!2#'B#,!)-'-!&%3'(.:G&'!&.#&-2!-!2#'#,!:3&+&G-.-2!
#,!(:3'(2!,43(.(2!,-&2! #$5&#%3#2<!E#7:&,(2! 5(,!(2!,43(.(2!E?#++2('3>!
H#'7#2('3>!I:&5J2('3!#!K#-)2('3>!5(%2&.#'-.(2!2:)#'&('#2!-(2!-%3#'&('#2>!
3-,*4,>!5(,(!#+#2>! !*-2#-.(2!%-!()#'-/0(!.#!5(,)-'-/0(<!L('!$,>!.&2-
5:3&'#,(2!(2!,43(.(2!M(:%3&%72('3>!C:5J#32('3! #!N-.&62('3! F:#! 3@,!#,!
5(,:,!(!;-3(!.#!%0(!:3&+&G-'#,!-!()#'-/0(!.#!5(,)-'-/0(!#>!2(*!-+7:,-2!
?&)A3#2#2>!#+#2!('.#%-,!#,!3#,)(! +&%#-',#%3#!)'()('5&(%-+!-(! 3-,-%?(!
da lista.
1. Ordenação Interna
M(,(!.&3(!%(!5-)93:+(!-%3#'&('>!-!('.#%-/0(!.#!.-.(2!4!:,!.(2!)'(*+#-
mas mais importantes e mais estudados dentro da ciência da computação. 
Em diversas situações cotidianas é preciso colocar uma lista em ordem 
para facilitar a busca de informações nela contidas.
8#23#!5-)93:+(!.&25(''#,(2!2(*'#!(2!)'&%5&)-&2!5'&34'&(2!.#!('.#%-/0(>!
.#$%&%.(!-%3#2>!%-!2#/0(!O>!;(',-+,#%3#!(!)'(*+#,-!.-!('.#%-/0(<!8-2!2#-
/P#2!2#7:&%3#2!20(!-)'#2#%3-.(2!#,!.#3-+?#2!(2!.&B#'2(2!,43(.(2!.#!('.#-
%-/0(!&%3#'%-<!L-'-!5-.-!:,!.#+#2!4!,(23'-.-!2:-!#$5&@%5&-!#,!3#',(2!.#!
5(%2:,(!.#!3#,)(!#!.#!,#,A'&-!#!(:3'(2!-2)#53(2!5(%2&.#'-.(2!'#+#B-%3#2<!
D%&5&-+,#%3#>! %-2! 2#/P#2! Q>! R! #! S>! -*('.-'#,(2! (2!,43(.(2!Bolha, 
Inserção e Seleção. Tais métodos, considerados inferiores, são bastante sim-
)+#2>!,-2!&%3'(.:G#,!&.#&-2!F:#!2#'B#,!.#!*-2#!)-'-!(:3'(2!,43(.(2!,-&2!
#$5&#%3#2<!=22#2!,43(.(2!:3&+&G-,!5(,(!:,-!.#!2:-2!()#'-/P#2!*T2&5-2!-!
comparação de elementos da lista.
Em seguida, nas seções 6, 7, 8 e 10, apresentaremos os métodos Shell-
sort, Mergesort, Quicksort e Heapsort. Esses métodos, considerados supe-
'&('#2>!:3&+&G-,!#23'-347&-2!,-&2!2($23&5-.-2!5(,(>!)('!#6#,)+(>!divisão e 
conquista!#!(!:2(!.#!#23':3:'-2!.#!.-.(2!5(%?#5&.-2!5(,(!heaps binários, 
.#25'&3(2!%-!E#/0(!U<!=22#2!,43(.(2!3-,*4,!20(!*-2#-.(2!%-!()#'-/0(!.#!
comparação.
L('!$,>!%-2!2#/P#2!VV>!VO!#!VQ>!.&25:3&'#,(2!(2!,43(.(2!Countingsort, 
Bucketsort e Radixsort<!=22#2!W+3&,(2!,43(.(2!3@,!#,!5(,:,!(!;-3(!.#!%0(!
:3&+&G-'#,!-!()#'-/0(!.#!5(,)-'-/0(<!1+4,!.&22(>!2(*!5#'3-2!?&)A3#2#2>!#+#2!
('.#%-,!#,!3#,)(!+&%#-',#%3#!)'()('5&(%-+!-(!3-,-%?(!.-!+&23-<
22 PESQUISA E ORDENAÇÃO DE DADOS
2. O Problema da Ordenação
L-'-!F:#!:,-!+&23-!)(22-!2#'!('.#%-.-!(2!2#:2!#+#,#%3(2!.#B#,!2#'!
dois a dois comparáveis<! D22(!2&7%&$!5-!F:#!.-.(2!.(&2!#+#,#%3(2!.-! +&23-!
.#B#!2#'!2#,)'#!)(229B#+!.#3#',&%-'!2#!#+#2!20(!#F:&B-+#%3#2!(:!2#!:,!.#+#2!
4!X,#%('Y!F:#!(!(:3'(<!1!&.4&-!-22(5&-.-!-(!3#',(!X,#%('Y!.#)#%.#!.(!5'&Z
34'&(!.#!5(,)-'-/0(!:3&+&G-.(<
"&GZ2#!F:#!:,-! +&23-!#23T!#,!('.#,!5'#25#%3#!2#!5-.-!:,!.#!2#:2!
elementos é menor ou igual ao seu sucessor segundo algum critério de 
5(,)-'-/0(<!1!.#$!%&/0(!.#!('.#,!.#5'#25#%3#!4!-%T+(7-<!M(,(!.&3(>!:,-!
lista somente pode ser colocada em ordem se os seus elementos forem dois 
-!.(&2!5(,)-'TB#&2<![!)'(*+#,-!.-!('.#%-/0(!5(%2&23#!#,>!.-.-!:,-!+&23->!
5(+(5TZ+-! #,!('.#,!5'#25#%3#!(:!.#5'#25#%3#<![2!)'&%5&)-&2! 5'&34'&(2! 20(!
5(,)-'-/0(!%:,4'&5->!5(,)-'-/0(!-+;-*43&5-!#!5(,)-'-/0(!5'(%(+A7&5-<!
 ! M(,)-'-/0(!%:,4'&5-\!:,!%W,#'(!x!4!,#%('!.(!F:#!:,!%W,#'(!y 
2#!-!#6)'#220(!x – y!'#2:+3-!#,!:,!%W,#'(!%#7-3&B(<!=22#!4!(!3&)(!
mais comum de comparação e, de certa forma, todos os demais cri-
térios de comparação derivam dele.
 ! M(,)-'-/0(!-+;-*43&5-\!:,!5-'-53#'#!4!,#%('!.(!F:#!(:3'(!2#!)'#Z
5#.#!#22#!(:3'(!%-!('.#,!.(!-+;-*#3(<!L('!#6#,)+(>!(!5-'-53#'#!X-Y!
)'#5#.#!(!X*Y>!(!X*Y!)'#5#.#!(!X5Y!#!-22&,!)('!.&-%3#<!8(!5(,):3-.('>!
(2!5-'-53#'#2!20(!'#)'#2#%3-.(2!-3'-B42!.#!%W,#'(2!]2#7:%.(!-+7:Z
,-!5(.&$!5-/0(>!)('!#6#,)+(>!1EMDD>!^8DM["=!#35_<!"#22-!;(',->!-!
comparação entre caracteres acaba sendo uma comparação entre os 
2#:2!5A.&7(2!%:,4'&5(2!#>!)('3-%3(>!4!:,-!5(,)-'-/0(!%:,4'&5-<
 ! M(,)-'-/0(!5'(%(+A7&5-\!^,-!.-3-!4!,#%('!.(!F:#!(:3'-!2#!#+-!-%Z
tecede essa outra. Uma data pode ser representada através de três 
%W,#'(2>!:,!)-'-!'#)'#2#%3-'!(!-%(>!(:3'(!)-'-!(!,@2!#!(:3'(!)-'-!
o dia. Ao comparar uma data com outra, comparamos o ano. Em 
caso de empate, comparamos o mês. Em caso de novo empate, com-
)-'-,(2!(!.&-<!E#%.(!-22&,>!-!5(,)-'-/0(!5'(%(+A7&5-!3-,*4,!4!
;#&3-!5(,)-'-%.(Z2#!%W,#'(2<
`!)(229B#+!.#$!%&'!(:3'(2!5'&34'&(2!.#!5(,)-'-/0(<!L('!#6#,)+(>!)(.#Z
,(2!5(,)-'-'!5-&6-2>!5(%2&.#'-%.(!,#%('!-F:#+-!F:#!-)'#2#%3-'!,#%('!
B(+:,#<!M(,(!(!B(+:,#!4!#6)'#22(!)('!:,!%W,#'(>!#22#!3&)(!.#!5(,)-'-Z
ção também é uma comparação numérica. 
L(.#'9-,(2>!%(!#%3-%3(>!5(%2&.#'-'!:,-!5-&6-!,#%('!.(!F:#!(:3'-!2#!
ela cabe!%#22-!(:3'-<!8#22#!5-2(>!)(.#,(2!3#'!5-&6-2!&%5(,)-'TB#&2<!^3&Z
+&G-%.(!#22#!5'&34'&(!.#!5(,)-'-/0(>!)(.#,(2!3#'!:,-!+&23-!.#!5-&6-2!F:#!
%0(!)(.#!2#'!('.#%-.-<!1+4,!.&22(>!F:-%.(!3#,(2!+&23-2!?#3#'(7@%#-2>!)(.#!
%0(!2#'!)(229B#+!('.#%TZ+-<!L('!#6#,)+(>!-! +&23-! ]R>! X*(+-Y>!O>!VSabOaObVV_!
não pode ser ordenada, pois seus elementos não são todos dois a dois com-
)-'TB#&2<
"&G#,(2!F:#!:,-!+&23-!#23T!#,!ordem crescente se cada elemento da 
+&23-!4!,#%('!(:!&7:-+!]2#7:%.(!(!5'&34'&(!.#!5(,)-'-/0(!-.(3-.(_!-(!2#:!2:Z
5#22('<!E#!5-.-!#+#,#%3(!.-!+&23-!4!#23'&3-,#%3#!,#%('!.(!F:#!2#:!2:5#22('>!
.&G#,(2!F:#!-!+&23-!#23T!#,!ordem estritamente crescente. Analogamente, 
.&G#,(2!F:#!:,-!+&23-!#23T!#,!ordem decrescente se cada elemento da lista 
4!,-&('!(:!&7:-+!-(!2#:!2:5#22('<!E#!5-.-!#+#,#%3(!.-!+&23-!4!#23'&3-,#%3#!
,-&('!.(!F:#!2#:!2:5#22('>!.&G#,(2!F:#!-!+&23-!#23T!#,!ordem estritamente 
decrescente<![*B&-,#%3#>!('.#%-/0(!#23'&3-!2(,#%3#!4!)(229B#+!2#!3(.(2!(2!
elementos da lista forem distintos.
1EMDD! Z! 1,#'&5-%! E3-%Z
.-'3!M(.#!;('!D%;(',-3&(%!
D%3#'5?-%7#! Z! MA.&7(! )-Z
drão americano para o in-
tercâmbio de informação
1F:&+(! F:#! .#$!%&,(2!
como ordem crescente é 
5?-,-.-! )('! -+7:%2! -:Z
tores de ordem não de-
crescente!#%F:-%3(!F:#!(!
F:#! 5?-,-,(2! .#! ordem 
estritamente crescente é 
5?-,-.-! )('! #22#2! ,#2Z
mos autores de ordem 
crescente<! [! F:#! 5?-,-Z
mos de ordem decrescen-
te! 4! 5?-,-.-! )('! -+7:%2!
de ordem não crescente 
#%F:-%3(! F:#! -! ordem 
estritamente decrescente 
4! 5?-,-.-! .#! ordem de-
crescente.
23PESQUISA E ORDENAÇÃO DE DADOS
[!)'(*+#,-!.-!('.#%-/0(!5(%2&23#!#,>!.-.-!:,-!+&23-!5:c(2!#+#,#%3(2!
2#c-,!3(.(2!.(&2!-!.(&2!5(,)-'TB#&2>!)#',:3-'!-!('.#,!.#!2#:2!#+#,#%3(2!
.#!,(.(!-!.#&6-'!-!+&23-!#,!('.#,!5'#25#%3#!(:!.#5'#25#%3#<
E#!-!+&23-!%0(!;('!,:&3(!7'-%.#!#+-!)(.#!2#'!-',-G#%-.-!%-!,#,A'&-!
)'&%5&)-+!]&%3#'%-_!.(!5(,):3-.('!#!2#'!('.#%-.-!:2-%.(!-)#%-2!-!,#,A'&-!
&%3#'%-<![2!-+7('&3,(2!F:#!('.#%-,!:3&+&G-%.(!-)#%-2!,#,A'&-!&%3#'%-!20(!
5?-,-.(2!.# métodos de ordenação de interna. 
=,!5(%3'-)-'3&.->!(2!-+7('&3,(2!F:#!;-G#,!:2(!.#!,#,A'&-!#63#'%-!
20(!5?-,-.(2!.# métodos de ordenação de externa. Alguns desses métodos 
2#'0(!.&25:3&.(2!%(!M-)93:+(!Q<
8(!'#23-%3#!.#23#!5-)93:+(!.#25'#B#'#,(2!.&B#'2(2!,43(.(2!.#!('.#-
%-/0(! &%3#'%-<!=,*('-!:,-! +&23-!)(22-!2#'!-',-G#%-.-!:2-%.(Z2#!:,-!
+&23-!#%5-.#-.->!.#25'#B#'#,(2!(2!-+7('&3,(2!5(%2&.#'-%.(!F:#!-!+&23-!#23T!
-',-G#%-.-!%:,!B#3('!&%.#6-.(!-!)-'3&'!.-!)(2&/0(!G#'(<!1+4,!.&22(>!5(%-
2&.#'-'#,(2!F:#!(!B#3('!-',-G#%-!%W,#'(2!#>!)('3-%3(>!(!5'&34'&(!.#!5(,-
)-'-/0(!2#'T!%:,4'&5(<!8-!.#25'&/0(!.(2!-+7('&3,(2!.#!('.#%-/0(>!B-,(2!
2#,)'#!5(%2&.#'-'!F:#!(!B#3('!4!)-22-.(!)('!'#;#'@%5&-<
M(%B4,!2-+&#%3-'!F:#!-!+&23-!)(.#!2#'!5(%23&3:9.-!.#!'#7&23'(!#!)(.#-
,(2!('.#%TZ+-!)('!:,!.#!2#:2!5-,)(2>!F:#!5?-,-,(2!.#!5?-B#!.#!('.#-
nação. A comparação entre os elementos da lista é feita comparando-se os 
B-+('#2!.-2!5?-B#2!.#!('.#%-/0(!.(2!.(&2!#+#,#%3(2<
[*B&-,#%3#>!(2!,43(.(2!-F:&!.#25'&3(2!)(.#,!2#'!;-5&+,#%3#!-.-)3--
.(2!)('!('.#%-'!+&23-2!#%5-.#-.-2!5:c(2!#+#,#%3(2!20(!'#7&23'(2<!=,!-+7:%2!
#6#'595&(2!3-&2!-.-)3-/P#2!20(!'#F:#'&.-2<
3. Bolha
[!H43(.(!C(+?-!4!*-23-%3#!2&,)+#2!#!&%3:&3&B(<!8#22#!,43(.(!(2!#+#-
,#%3(2!.-!+&23-!20(!,(B&.(2!)-'-!-2!)(2&/P#2!-.#F:-.-2!.#!;(',-!5(%39%:->!
-22&,!5(,(!:,-!*(+?-!,(B#Z2#!%:,!+9F:&.(<!E#!:,!#+#,#%3(!#23T!&%&5&-+-
,#%3#!%:,-!)(2&/0(!&!#>!)-'-!F:#!-!+&23-!$F:#!('.#%-.->!#+#!.#B#!(5:)-'!-!
)(2&/0(!c>!#%30(!#+#!3#'T!F:#!)-22-'!)('!3(.-2!-2!)(2&/P#2!#%3'#!&!#!c<
=,!5-.-!&3#'-/0(!.(!,43(.(>!)#'5(''#,(2!-!+&23-!-!)-'3&'!.#!2#:!&%9-
cio comparando cada elemento com seu sucessor, trocando-os de posição 
2#!?(:B#'!%#5#22&.-.#<!`!)(229B#+!,(23'-'!F:#>!2#!-!+&23-!3&B#'!n elementos, 
-)A2!%(!,T6&,(!]%dV_!&3#'-/P#2!-!+&23-!#23-'T!#,!('.#,<!1!2#7:&'!;('%#5#-
,(2!:,-!.#25'&/0(!#,!)2#:.(5A.&7(!.(!C(+?-<
ALGORITMO BOLHA 
 ENTRADA: UM VETOR L COM N POSIÇÕES 
 SAÍDA: O VETOR L EM ORDEM CRESCENTE 
 
 PARA i = 1 até n - 1 
 PARA j = 0 até n – 1 - i 
 SE L[j] > L[j+1] 
 AUX = L[j] // SWAP 
 L[j] = L[j+1] 
 L[j+1] = AUX
FIM {BOLHA}
Algoritmo 2.1: Bolha
8-!.#25'&/0(!.(!1+7('&3,(!C(+?-!.#&6-,(2!5+-'(!5(,(!'#-+&G-'!-!3'(5-!
(swap_!.#!#+#,#%3(2!.-! +&23-<!8(!'#23-%3#!.#23#!5-)93:+(>! ;-'#,(2!(!swap 
24 PESQUISA E ORDENAÇÃO DE DADOS
usando o procedimento troca<!122&,>!-!5?-,-.-!troca(L[i], L[j]) serve para 
3'(5-'!(2!5(%3#W.(!.-2!)(2&/P#2!&!#!c!.(!B#3('!e<
`!;T5&+!)#'5#*#'!F:#!-(!$!%-+!.-!)'&,#&'-!&3#'-/0(!.(!+-/(!,-&2!#63#'%(!
.(!1+7('&3,(!C(+?->!(!,-&('!#+#,#%3(!.-!+&23-!#23-'T!%-!W+3&,-!)(2&/0(!.(!
B#3('<!E#%.(!-22&,>!%-! &3#'-/0(!2#7:&%3#!%0(!)'#5&2-,(2!,-&2!%(2!)'#(Z
5:)-'!5(,!-!W+3&,-!)(2&/0(!.(!B#3('<!1(!$!%-+!.-!2#7:%.-!&3#'-/0(>!(2!.(&2!
,-&('#2!B-+('#2!.-!+&23-!#23-'0(!%-2!.:-2!W+3&,-2!)(2&/P#2!.(!B#3('!e>!#,!
('.#,!5'#25#%3#<!80(!)'#5&2-,(2!#%30(!%(2!)'#(5:)-'!5(,!-2!.:-2!W+3&,-2!
posições do vetor. 
"#!;-3(>!%(!1+7('&3,(!C(+?-!4!BT+&.(!(!2#7:&%3#!&%B-'&-%3#\!-(!$!%-+!.-!
&3#'-/0(!J!.(!+-/(!,-&2!#63#'%(>!(2!J!,-&('#2!B-+('#2!.-!+&23-!#23-'0(!%-2!J!W+Z
timas posições do vetor, em ordem crescente. A corretude do algoritmo decorre 
.#22#!&%B-'&-%3#<!1+4,!.&22(>!(!&%B-'&-%3#!#6)+&5-!)('F:#!%(!+-/(!,-&2!&%3#'%(!
(!5(%3-.('!c!2A!)'#5&2-!B-'&-'!.#!b!])'&,#&'-!)(2&/0(!.(!B#3('_!-34!%!d!V!d!&<
M+-'-,#%3#>!-! &%23':/0(!5'93&5-!.(!1+7('&3,(!C(+?-!4!-!5(,)-'-/0(!
]2#_<!=,!5-.-!&3#'-/0(!.(!+-/(!,-&2!&%3#'%(!4!;#&3-!:,-!5(,)-'-/0(<!M(,(!
-!F:-%3&.-.#!.#!&3#'-/P#2!.(!+-/(!&%3#'%(!.&,&%:&!f!,#.&.-!F:#!&!-:,#%3->!
(!%W,#'(!.#!5(,)-'-/P#2!'#-+&G-.-2!)#+(!-+7('&3,(!4\
i M(,)-'-/P#2
0 n – 1
1 %!d!O
... ...
n – 1 1
Total (nO!Z!%_aO
122&,>!-!5(,)+#6&.-.#!3#,)('-+!.(!1+7('&3,(!C(+?-!)#'3#%5#!-! (nO_<!
1+4,!.(2!)-'g,#3'(2!.#!#%3'-.-!]e!#!%_>!(!-+7('&3,(!:3&+&G-!-)#%-2!3'@2!B-Z
'&TB#&2!#25-+-'#2!]&>!c!#!-:6_<!"#22-!;(',->!-!F:-%3&.-.#!#63'-!.#!,#,A'&-!
:3&+&G-.-!)#+(!-+7('&3,(!4!5(%23-%3#<!E#%.(!-22&,>!2:-!5(,)+#6&.-.#!#2)-Z
cial pertence a O]V_<![2!,43(.(2!.#!('.#%-/0(!5:c-!5(,)+#6&.-.#!#2)-5&-+!
pertence a O]V_!20(!5?-,-.(2!,43(.(2!.#!('.#%-/0(!in situ. Esse é o caso 
.(!H43(.(!C(+?-<!
Outro aspecto importante dos métodos de ordenação é a estabilidade. 
"&G#,(2!F:#!:,!,43(.(!.#!('.#%-/0(!4!estável se ele preserva a ordem 
'#+-3&B-!#6&23#%3#!#%3'#!(2!#+#,#%3(2!'#)#3&.(2!.-!+&23-<!L('!#6#,)+(>!2#!-!
('.#%-/0(!.-!+&23-!]R>!h>!i>!7>!O_!'#2:+3-!#,!]O>!R>!i>!h>!7_>!-!('.#%-/0(!;(&!#2Z
3TB#+<![*2#'B#!F:#!(!2#3#!2:*+&%?-.(!#23-B-!f!.&'#&3-!.(!(:3'(!2#3#!#!-(!$!%-+!
.-!('.#%-/0(!#+#!5(%3&%:(:!f!.&'#&3-<!E#!3(.-2!-2!('.#%-/P#2!)'(.:G&.-2!
)('!:,!,43(.(!.#!('.#%-/0(!20(!#23TB#&2>!.&G#,(2!F:#!(!,43(.(!4!#23TB#+<!
[*2#'B#!F:#!%(!1+7('&3,(!C(+?->!F:-%.(!5(,)-'-,(2!.(&2!#+#,#%3(2!
.-!+&23->!2(,#%3#!;-G#,(2!(!swap!2#!(!-%3#5#22('!;('!,#%('!.(!F:#!(!2:5#2Z
2('>!)(&2!3&B#,(2!(!5:&.-.(!.#!:3&+&G-'!:,-!.#2&7:-+.-.#!#23'&3-!%-!5(,)-Z
'-/0(<!M(,(!5(%2#F:@%5&->!(!1+7('&3,(!C(+?-!4!#23TB#+<!
1!2#7:&'!#6&*&,(2!(!5(%3#W.(!.#!:,!B#3('!-)A2!5-.-!&3#'-/0(!.(!+-/(!
,-&2!#63#'%(!.(!1+7('&3,(!C(+?-<
1!+#3'-!7'#7-!jkj!4!:2-.-!
para denotar a ordem de 
5(,)+#6&.-.#!,#.&-!#!j[j
para o pior caso.
In situ: =6)'#220(!+-3&%->!
:2-.-! #,! BT'&(2! 5(%3#6Z
3(2>! F:#! 2&7%&$!5-! X%(! +:Z
7-'Y<
25PESQUISA E ORDENAÇÃO DE DADOS
0 1 O Q R 5
e&23-!('&7&%-+ U R 5 10 5 8
1ª iteração R 5 U 5 8 10
Ol!&3#'-/0( R 5 5 8 U 10
Ql!&3#'-/0( R 5 5 8 U 10
Rl!&3#'-/0( R 5 5 8 U 10
5ª iteração R 5 5 8 U 10
Figura 2.1: Ordenação com o Algoritmo Bolha
8#23#!#6#,)+(!)#'5#*#,(2!F:#!%(!$%-+!.-!2#7:%.-! &3#'-/0(!-! +&23-!
cT!#23-B-!('.#%-.-<!8-!3#'5#&'-!&3#'-/0(!%0(!?(:B#!%#%?:,-!-+3#'-/0(!%-!
+&23-<!=22-!;-3(!%(2!)#',&3&'&-!5(%5+:&'!F:#!-!+&23-!cT!#23-B-!#,!('.#,>!.#!
,(.(!F:#!-2!.:-2!W+3&,-2!&3#'-/P#2!;('-,!&%W3#&2<!
L(.#,(2! &%3'(.:G&'! :,-!)#F:#%-!,(.&$5-/0(!%(!H43(.(!C(+?-!.#!
,(.(! -! 3('%TZ+(! :,! )(:5(!,-&2! X#2)#'3(Y! #! #B&3-'! &3#'-/P#2! &%W3#&2<! m-+!
,(.&$5-/0(!5(%2&23#!#,!:2-'!:,-!B-'&TB#+!] !"_!)-'-!2&%-+&G-'!2#!;(&!'#-+&-
G-.-!-+7:,-!3'(5-!.#!#+#,#%3(2!%:,-!&3#'-/0(!.(!,43(.(<!M-2(!%#%?:,-!
3'(5-!3#%?-!2&.(!'#-+&G-.->!-!+&23-!cT!#23-'T!#,!('.#,!#>!)('3-%3(>!(!,43(.(!
.#B#!)-'-'<!8(!#6#,)+(!-%3#'&('>!-)A2!-!3#'5#&'-!&3#'-/0(!-!('.#%-/0(!2#'&-!
$%-+&G-.-<
=22-!B-'&-%3#!.(!C(+?-!4!5(%?#5&.-!5(,(!Bolha com Flag e seu pseu-
.(5A.&7(!4!;('%#5&.(!-!2#7:&'<
ALGORITMO BOLHA_COM_FLAG 
 ENTRADA: UM VETOR L COM N POSIÇÕES 
 SAÍDA: O VETOR L EM ORDEM CRESCENTE 
 
 i = 0 
 FAÇA 
 FLAG = FALSO 
 PARA j = 0 até n – 1 - i 
 SE L[j] > L[j+1] 
 TROCA(L[J], L[J+1]) 
 FLAG = VERDADEIRO 
 i = i + 1 
 ENQUANTO FLAG = VERDADEIRO
FIM {BOLHA_COM_FLAG}
Algoritmo 2.2: Bolha com Flag
=%F:-%3(!F:#!(!3#,)(!'#F:#'&.(!)#+(!C(+?-!4!2#,)'#!F:-.'T3&5(!#,!
'#+-/0(!-(!3-,-%?(!.-!+&23->!(!5(,)('3-,#%3(!.(!C(+?-!5(,!n+-7!4!2#%29B#+!
-(!3&)(!.#!+&23-!;('%#5&.-!5(,(!#%3'-.-<!8(!,#+?('!5-2(>!F:#!(5(''#!F:-%-
.(!-!+&23-!;('%#5&.-!cT!#23-!('.#%-.->!(!1+7('&3,(!C(+?-o5(,on+-7!'#F:#'!
tempo ]%_!)(&2!-!5(,)-'-/0(!2#'T!2#,)'#! ;-+2-!#!-!B-'&TB#+!p-7! c-,-&2!
'#5#*#'T!(!B-+('!B#'.-.#&'(<!"#22-!;(',->!-)A2!-!)'&,#&'-!&3#'-/0(!.(!+-/(!
#63#'%(!(!-+7('&3,(!2#'T!$%-+&G-.(<!
E:)(%?-!-7('-!F:#!(!,#%('!#+#,#%3(!#23T!&%&5&-+,#%3#!%-!W+3&,-!)(-
2&/0(!.-!+&23-<![*2#'B#!F:#!-!5-.-!&3#'-/0(!.(!+-/(!#63#'%(!(!,#%('!#+#,#%3(!
2#'T!,(B&.(!-)#%-2!:,-!)(2&/0(!)-'-!-!#2F:#'.-<!!E#'0(!%#5#22T'&-2!%!d!V!
&3#'-/P#2!)-'-!F:#!(!,#%('!#+#,#%3(!-+5-%5#!-!)'&,#&'-!)(2&/0(!.-!+&23-<!
8#22#! 5-2(>! (! 5(,)('3-,#%3(! .(! 1+7('&3,(!C(+?-o5(,on+-7! 2#'T! &.@%3&-
5(!-(!.(!1+7('&3,(!C(+?-<!M(%5+:9,(2!F:#!%(!)&('!5-2(!(!C(+?-!5(,!n+-7!
'#F:#'!3#,)(! (nO_<!n&%-+,#%3#>!4!)(229B#+!,(23'-'!F:#!(!.#2#,)#%?(!.(!
C(+?-!5(,!n+-7!%(!5-2(!,4.&(!3-,*4,!)#'3#%5#!-! (nO_<
26 PESQUISA E ORDENAÇÃO DE DADOS
4. Inserção
[!H43(.(!D%2#'/0(>!3-,*4,!5(%?#5&.(!5(,(!D%2#'/0(!"&'#3->!4!*-2-
3-%3#!2&,)+#2!#!-)'#2#%3-!:,!.#2#,)#%?(!2&7%&$5-3&B-,#%3#!,#+?('!F:#!
(!H43(.(!C(+?->!#,!3#',(2!-*2(+:3(2<!1+4,!.&22(>!5(,(!B#'#,(2!%(!$%-+!
.#22-!2#/0(>!#+#!4!#63'#,-,#%3#!#$5&#%3#!)-'-!+&23-2!F:#!cT!#23#c-,!2:*2-
tancialmente ordenadas.
8#22#!,43(.(!5(%2&.#'-,(2!F:#!-!+&23-!#23T!.&B&.&.-!#,!)-'3#!#2F:#'-
.->!cT!('.#%-.->!#!)-'3#!.&'#&3->!#,!)(229B#+!.#2('.#,<!D%&5&-+,#%3#>!-!)-'3#!
#2F:#'.-!5(%34,!-)#%-2!(!)'&,#&'(!#+#,#%3(!.-!+&23-<!M-.-!&3#'-/0(!5(%2&2-
3#!#,!&%2#'&'!(!)'&,#&'(!#+#,#%3(!.-!)-'3#!.&'#&3-!])&Bq_!%-!)(2&/0(!-.#F:--
.-!.-!)-'3#!#2F:#'.->!.#!,(.(!F:#!-!)-'3#!#2F:#'.-!5(%3&%:#!('.#%-.-<!
`!;T5&+!)#'5#*#'!F:#!2#!-!+&23-!)(22:&!%!#+#,#%3(2>!-)A2!%!d!V!&%2#'/P#2!#+-!
#23-'T!('.#%-.-<
L-'-! &%2#'&'!(!)&Bq!)#'5(''#,(2!-!)-'3#!#2F:#'.->!.-!.&'#&3-!)-'-!-!
#2F:#'.->!.#2+(5-%.(!(2!#+#,#%3(2!#23'&3-,#%3#!,-&('#2!F:#!(!)&Bq!:,-!
)(2&/0(!)-'-!.&'#&3-<![!)&Bq!.#B#!2#'!5(+(5-.(!&,#.&-3-,#%3#!f!#2F:#'.-!.(!
W+3&,(!#+#,#%3(!,(B&.(<
ALGORITMO INSERÇÃO 
 ENTRADA: UM VETOR L COM N POSIÇÕES 
 SAÍDA: O VETOR L EM ORDEM CRESCENTE 
 
 PARA i = 1 até n - 1 
 PIVO = L[i] 
 j = i - 1 
 !"#$%"&' ( ) * + ,-./ 0 123' 
 L[j+1] = L[j] 
 j = j - 1 
 L[j+1] = PIVO
FIM {INSERÇÃO}
Algoritmo 2.3: Inserção
 !"#$%&!'"()*!+",-$"!(!''$",-)./!")"%0*1)"2!'.$(0/)"(!#!"$.1')/)"34"
$*14"!'/$.)/)+"()/)"0.*$'56!"7"2$01)"$#"1$#8!"(!.*1).1$+"8!0*"!"809:"7"#)0!'"
!-"0;-)%")"1!/!*"!*"$%$#$.1!*"/)"8)'1$"$*,-$'/)"$")"(!./056!"/!"%)5!"0.1$'-
.!".-.()"7"9$'/)/$0')<" $**$"()*!+")"(!#8%$=0/)/$"1$#8!')%"/!">%;!'01#!"
Inserção pertence a ?.@<"
 !"80!'"()*!+",-$"!(!''$",-)./!")"%0*1)"$*14"0.9$'*)#$.1$"!'/$.)/)+"
()/)"0.*$'56!"'$,-$'",-$"1!/!*"!*"$%$#$.1!*"/)"8)'1$"$*,-$'/)"*$3)#"#!-
90/!*"8)')")"/0'$01)+"8!0*"1!/!*"$%$*"*$'6!"#)0!'$*"/!",-$"!"809:<" $**$"()*!+"
)",-).10/)/$"1!1)%"/$"01$')5A$*"/!"%)5!"0.1$'.!"*$'4"?.B"C".@DB"$")"(!#8%$=0-
/)/$"1$#8!')%"/!">%;!'01#!"E.*$'56!"*$'4" (nB@<"
>"(!#8%$=0/)/$"1$#8!')%"/!">%;!'01#!"E.*$'56!".!"()*!"#7/0!"1)#F7#"
pertence a (nB@<"E**!"/$(!''$"/!"2)1!"/$",-$+"$#"#7/0)+"()/)"01$')56!"'$,-$'"
,-$"#$1)/$"/!*"$%$#$.1!*"/)"8)'1$"$*,-$'/)"*$3)#"#!90/!*"8)')")"/0'$01)<"
G"8!**H9$%"#!*1')'")0./)",-$"*$"1!/!*"!*"$%$#$.1!*"/)"%0*1)"$*16!"0.0-
(0)%#$.1$"I"/0*1J.(0)".!"#4=0#!"("?!./$"("7"-#)"(!.*1).1$@"/)"8!*056!"$#"
,-$"/$9$"K()'",-)./!")" %0*1)"$*109$'"!'/$.)/)+"!"L71!/!"E.*$'56!"'$,-$'"
tempo linear.
M">%;!'01#!"E.*$'56!"'$,-$'"!"-*!"/$")8$.)*"1'N*"9)'049$0*"$*()%)'$*<"
O$./!")**0#+"*-)"(!#8%$=0/)/$"$*8)(0)%"7"O?P@<"MF*$'9$",-$"-#"$%$#$.1!"
/)"8)'1$"$*,-$'/)"*!#$.1$"7"#!90/!"8)')")"/0'$01)"*$"$%$"2!'"$*1'01)#$.1$"
#)0!'"/!",-$"!"809:<"Q!'"(!.1)"/0**!+"!">%;!'01#!"E.*$'56!"7"$*149$%<"
27PESQUISA E ORDENAÇÃO DE DADOS
 )"K;-')")"*$;-0'"$=0F0#!*"!"(!.1$R/!"/$"-#"9$1!'")8S*"()/)"01$')-
56!"/!"%)5!"#)0*"$=1$'.!"/!">%;!'01#!"E.*$'56!<">"8)'1$"$*,-$'/)"/)"%0*1)"
aparece sombreada.
0 1 B T U 5
V0*1)"!'0;0.)% W U 5 10 5 8
1ª iteração U W 5 10 5 8
BX"01$')56! U 5 W 10 5 8
TX"01$')56! U 5 W 10 5 8
UX"01$')56! U 5 5 W 10 8
5ª iteração U 5 5 8 W 10
Figura 2.2: Ordenação com o Algoritmo Inserção
5. Seleção
M"L71!/!"O$%$56!"1$#"(!#!"8!.1!"2!'1$"!"2)1!"/$",-$"$%$"'$)%0Y)"8!--
cas operações de swap<"O$-"/$*$#8$.&!+"$#"1$'#!*")F*!%-1!*+"(!*1-#)"
*$'"*-8$'0!'")!"/!"L71!/!"Z!%&)+"#)*"0.2$'0!'")!"/!"L71!/!"E.*$'56!<"
>**0#"(!#!".!"L71!/!" E.*$'56!+".$**$"#71!/!"(!.*0/$')#!*",-$")"
%0*1)"$*14"/090/0/)"$#"8)'1$"$*,-$'/)+"34"!'/$.)/)+"$"8)'1$"/0'$01)+"$#"8!*-
*H9$%"/$*!'/$#<">%7#"/0**!+"!*"$%$#$.1!*"/)"8)'1$"$*,-$'/)"*6!"1!/!*"#$-
nores ou iguais aos elementos da parte direita.
[)/)"01$')56!"(!.*0*1$"$#"*$%$(0!.)'"!"#$.!'"$%$#$.1!"/)"8)'1$"/0-
'$01)"?809:@"$"1'!(4C%!"(!#"!"8'0#$0'!"$%$#$.1!"/)"8)'1$"/0'$01)<"[!#"0**!+")"
8)'1$"$*,-$'/)")-#$.1)+"8!0*"8)**)")"0.(%-0'"!"809:+"$")"8)'1$"/0'$01)"/0#0-
.-0<" !1$",-$"!"809:"7"#)0!'",-$"1!/!*"!*"/$#)0*"$%$#$.1!*"/)"8)'1$"$*,-$'-
/)+"8!'1).1!")"8)'1$"$*,-$'/)"(!.10.-)"!'/$.)/)<">%7#"/0**!+"!"809:"$')"!"
#$.!'"$%$#$.1!"/)"8)'1$"/0'$01)"$+"8!'1).1!+"(!.10.-)"*$./!"9$'/)/$",-$"
!*"$%$#$.1!*"/)"8)'1$"$*,-$'/)"*6!"1!/!*"#$.!'$*"!-"0;-)0*")!*"$%$#$.1!*"
/)"8)'1$"/0'$01)<"E.0(0)%#$.1$+")"8)'1$"$*,-$'/)"7"9)Y0)<"O$")"%0*1)"8!**-0"."
$%$#$.1!*+")8S*"."\"P"01$')5A$*"$%)"$*1)'4"!'/$.)/)<
ALGORITMO SELEÇÃO 
 ENTRADA: UM VETOR L COM N POSIÇÕES 
 SAÍDA: O VETOR L EM ORDEM CRESCENTE 
 
 PARA i = 0 ate n - 2 
 MIN = i 
 PARA j = i + 1 até n - 1 
 SE L[j] < L[MIN] 
 MIN= j 
 TROCA(L[i], L[MIN])
FIM {SELEÇÃO}
Algoritmo 2.4: Seleção
>").4%0*$"/!">%;!'01#!"O$%$56!"7"*$#$%&).1$"I").4%0*$"/!">%;!'01#!"
Z!%&)<"M*"/!0*")%;!'01#!*"*6!"(!.*101-H/!*"/$"/!0*" %)5!*"(!.1)/!*"$.()0-
=)/!*",-$"'$)%0Y)#")*"#$*#)*",-).10/)/$*"/$"01$')5A$*<"]$**)"2!'#)+"*$"
1!'.)"$90/$.1$",-$"!">%;!'01#!"O$%$56!"'$)%0Y)"?.B"C".@DB"(!#8)')5A$*"$"*-)"
(!#8%$=0/)/$"1$#8!')%"8$'1$.($")" (nB@<">**0#"(!#!".!"Z!%&)+".6!"2)Y"*$.-
10/!"2)%)'"$#"#$%&!'".$#"80!'"()*!<">#F!*"!*")%;!'01#!*"'$,-$'$#"1$#8!"
,-)/'410(!+",-)%,-$'",-$"*$3)")"%0*1)<"
M">%;!'01#!"O$%$56!".$($**01)"/$")8$.)*",-)1'!"9)'049$0*"$*()%)'$*"
8)')"2)Y$'"!"*$-"1')F)%&!"?-#)"9)'049$%")-=0%0)'"7"-*)/)".!"8'!($/0#$.1!"
1'!()@<"O$./!")**0#+")"(!#8%$=0/)/$"$*8)(0)%"/!"O$%$56!"7"O?P@<"
28 PESQUISA E ORDENAÇÃO DE DADOS
^=0F0#!*".)"_0;-')"B<T"!"(!.1$R/!"/$"-#"9$1!'")8S*"()/)"01$')56!"/!"
%)5!"#)0*"$=1$'.!"/!">%;!'01#!"O$%$56!<">"8)'1$"$*,-$'/)"/)"%0*1)")8)'$($"
*!#F'$)/)<"Q!'"$**$"$=$#8%!"8$'($F$#!*",-$"!"L71!/!"O$%$56!"7"não-estável. 
0 1 B T U 5
V0*1)"!'0;0.)% 10 U 5 T 10 B
1ª iteração B U 5 T 10 10
BX"01$')56! B T 5 U 10 10
TX"01$')56! B T U 5 10 10
UX"01$')56! B T U 5 10 10
5ª iteração B T U 5 10 10
Figura 2.3: Ordenação com o Algoritmo Seleção
6. Shellsort
M"L71!/!" O&$%%*!'1" 2!0" 8'!8!*1!" 8!'"]!.)%/" O&$%%" $#"PW`W" $" 7" -#"
$=$#8%!"/$"-#")%;!'01#!"24(0%"/$"/$*('$9$'"$" 0#8%$#$.1)'+"#)*"/02H(0%"/$"
).)%0*)'<"a#)" $=8%0()56!" 8'$(0*)" 8)')" *$-" *-'8'$$./$.1$" /$*$#8$.&!" 7"
-#"/!*"$.0;#)*",-$"/$*)K)#"!*"8$*,-0*)/!'$*"&4"/7()/)*<
Q)')"/$*('$9$'"!"O&$%%*!'1"(!#"#)0*"2)(0%0/)/$"7"(!.9$.0$.1$"/$K.0'"!"
termo h-lista<"])/)"-#)"%0*1)"V+"-#)"&CV0*1)"/$"V"7"-#)"*-F%0*1)"#)=0#)%"
/$"V".)",-)%"()/)"$%$#$.1!"$*14")"/0*1J.(0)"&"/$"*$-"*-($**!'<"Q!'"$=$#-
8%!+"8)')"&"b"T+")"%0*1)")"*$;-0'"(!.17#"1'N*"&C%0*1)*<">"8'0#$0')"&C%0*1)"7"
(!.*101-H/)"/!*"$%$#$.1!*".)*"8!*05A$*"c+"T"$"d"/!"9$1!'<">"*$;-./)"&C%0*1)"
(!.17#"!*"$%$#$.1!*".)*"8!*05A$*"P+"U"$"e<">"1$'($0')"&C%0*1)"7"(!.*101-H/)"
/!*"$%$#$.1!*".)*"8!*05A$*"B"$"`<
0 1 B T U 5 6 7
10 U 5 T 10 B 1 PB
 
Figura 2.4: Uma lista dividida em h-listas (h = 3)
 !"O&$%%*!'1+")"%0*1)"7"*-F/090/0/)"$#"&C%0*1)*+")*",-)0*"*6!"!'/$.)/)*"
(!#"-#"#71!/!"/$"!'/$.)56!",-)%,-$'<"^**$"8'!($/0#$.1!"7"'$8$10/!"8)')"
9)%!'$*"/$('$*($.1$*"/$"&+"*$./!",-$"!"R%10#!"9)%!'"/$"&"1$#",-$"*$'"P<">"
%0*1)"$*1)'4"$.16!"!'/$.)/)<"
MF*$'9$",-$"!"O&$%%*!'1"8$'#01$"/09$'*)*"0#8%$#$.1)5A$*"/02$'$.1$*<"
[)F$")!"8'!;')#)/!'"/$(0/0'",-)%"#71!/!"/$"!'/$.)56!"$%$"-*)'4"8)')"!'-
/$.)'")*"&C%0*1)*<"a#)"F!)"!856!"7"-10%0Y)'"!"#71!/!"E.*$'56!<
>%7#"/0**!+"!"8'!;')#)/!'"1)#F7#"1$'4"/$(0/0'",-)0*"9)%!'$*"/$"&"$%$"
-10%0Y)'4<"]!.)%/"O&$%%"*-;$'0-"-*)'"8!1N.(0)*"/$"B"(!#!"9)%!'$*"/$"&<"Q!'"
$=$#8%!+" 8)')" !'/$.)'"-#)" %0*1)"/$"Pcc" $%$#$.1!*+" *$'0)#"-10%0Y)/!*" !*"
.R#$'!*"dU+"TB+"Pd+"f+"U+"B"$"P"(!#!"9)%!'$*"/$"&<"
Q!*1$'0!'#$.1$+"!-1'!"8$*,-0*)/!'+"]!.)%/"g.-1&+"#!*1'!-",-$"!"/$-
*$#8$.&!"/!"O&$%%*!'1".6!"7"F!#"*$"!*"9)%!'$*",-$"&")**-#$")!"%!.;!"/)"
$=$(-56!"/!"#71!/!"*6!"#R%108%!*"-.*"/!*"!-1'!*<"^%$"$.16!"*-;$'0-"()%(--
%)'"!*"9)%!'$*"/$"&")1')97*"/)"*$;-0.1$"2S'#-%)"/$"'$(!''N.(0)h"&"b"T"i"&"j"P<" 
[!#!"!"R%10#!"9)%!'"/$"&"1$#",-$"*$'"P+"-*)./!"$**)"2S'#-%)+"!"9)%!'").-
1$'0!'"/$"&"*$'0)"U<">.1$*"/$"U+"!"9)%!'"/$"&"*$'0)"PT+"$")**0#"8!'"/0).1$<"
Q!'"$=$#8%!+"8)')"!'/$.)'"-#)"%0*1)"/$"Pcc"$%$#$.1!*+"*$'0)#"-10%0Y)/!*"
!*".R#$'!*"Uc+"PT+"U"$"P"(!#!"9)%!'$*"/$"&<"]!.)%/"g.-1&"#!*1'!-"$#80-
'0()#$.1$",-$"!"/$*$#8$.&!"/!"O&$%%*!'1"'09)%0Y)"(!#"!"/$*$#8$.&!"/!*"
29PESQUISA E ORDENAÇÃO DE DADOS
#$%&!'$*"#71!/!*"/$"!'/$.)56!")!"!'/$.)'"%0*1)*"/$"8$,-$.!"$"#7/0!"8!'1$"
,-)./!"7"-*)/)")"2S'#-%)"*-;$'0/)"8!'"$%e.
ALGORITMO SHELLSORT
 ENTRADA: UM VETOR L COM N POSIÇÕES
 SAÍDA: O VETOR L EM ORDEM CRESCENTE
 H = 1
 ENQUANTO H < n FAÇA H = 3 * H + 1
 FAÇA
 H = H / 3 // divisão inteira
 PARA i = H até n – 1 // Inserção adaptado para h-listas
 PIVO = L[i]
 j = i - H
 !"#$%"&' ( ) * + ,-(. / 012'
 L[j + H] = L[j]
 j= j - H
 L[j + H] = PIVO
 ENQUANTO H > 1
FIM {SHELLSORT}
Algoritmo 2.5: Shellsort
 !1$",-$"!*"9)%!'$*"/$"&"/$('$*($#"8')10()#$.1$".-#)"8'!;'$**6!"
;$!#71'0()" /$" ')Y6!" PDT<" E**!" 0#8%0()" ,-$" )" ,-).10/)/$" /$" 01$')5A$*" /!"
%)5!"#)0*"$=1$'.!"8$'1$.($")" ?%!;.@<" !"#$%&!'"()*!+",-$"!(!''$",-)./!"
)"%0*1)"2!'.$(0/)"34"$*14"!'/$.)/)+")"(!./056!"/!"%)5!"0.1$'.!".-.()"7"9$'C
/)/$0')<" $**$"()*!+"()/)"01$')56!"/!"%)5!"#)0*"$=1$'.!"7"2$01)"$#"1$#8!"
%0.$)'"$+"8!'1).1!+")"(!#8%$=0/)/$"1$#8!')%"/!">%;!'01#!"O&$%%*!'1"8$'1$.($"
a ?.%!;.@<" 6!"*$"(!.&$($")"$=)1)"(!#8%$=0/)/$"/!"O&$%%*!'1".!"80!'"()*!<"
O)F$C*$+".!"$.1).1!+",-$"1)%"(!#8%$=0/)/$"$*14"$.1'$" ?.%!;.@""$" (n1,5@<"
M"O&$%%*!'1"7"#)0*"-#"#71!/!"/$"!'/$.)56!"in situ, pois sua comple-
=0/)/$"$*8)(0)%"7"(!.*1).1$<"O!F'$")"$*1)F0%0/)/$+"!"$=$#8%!"/)"_0;-')"B<`"
/$0=)"(%)'!",-$")!"!'/$.)'")*"&C%0*1)*"!"O&$%%*!'1"8!/$" 0.9$'1$'")"!'/$#"
$=0*1$.1$"$.1'$"!*"$%$#$.1!*"'$8$10/!*+"#$*#!",-$"*$3)"-*)/!"-#"#71!/!"
/$" !'/$.)56!" $*149$%" ?(!#!" !" E.*$'56!@" 8)')" !'/$.)'" )*" &C%0*1)*<" [!.*$C
,-$.1$#$.1$+"!"O&$%%*!'1"7"não-estável.
0 1 B T U 5 6 7
1 U B T 10 5 10 PB
 
Figura 2.5: h-listas da Figura 2.4 em ordem crescente
7. Mergesort
^**$"#71!/!+"8'!8!*1!"8!'"k!&."l!." $-#).."$#"PWU`+"7"F)*$)/!"
.-#)"$*1')17;0)"/$"'$*!%-56!"/$"8'!F%$#)*"(!.&$(0/)"(!#!"divisão e con-
quista. Essa técnica consiste, basicamente, em decompor a instância a ser 
resolvida em instâncias menores do mesmo tipo de problema, resolver tais 
0.*1J.(0)*"?$#";$')%+"'$(-'*09)#$.1$@"$"8!'"K"#"-10%0Y)'")*"*!%-5A$*"8)'(0)0*"
para obter uma solução da instância original.
Naturalmente, nem todo problema pode ser resolvido através de divi-
*6!"$"(!.,-0*1)<"Q)')",-$"*$3)"9049$%")8%0()'"$**)"17(.0()")"-#"8'!F%$#)"$%$"
deve possuir duas propriedades estruturais. O problema deve ser decompo-
^#" BccP+" L)'(0." [0-C
')" #!*1'!-" ,-$" -10%0Y)'"
)" *$,-N.(0)"P+"U+"Pc+"BT+"
`e+"PTB+"TcP+"ecP"$"Pe`c""
(!#!"9)%!'$*"/$"&"8'!/-Y"
'$*-%1)/!*" )0./)" #$%&!C
'$*" ,-$" -10%0Y)'" )" 2S'#-C
%)" 8'!8!*1)" 8!'" g.-1&<"
>"*$,-N.(0)"/$"[0-')"7")"
#$%&!'" (!.&$(0/)" )1-)%C
mente.
30 PESQUISA E ORDENAÇÃO DE DADOS
nível+"!-"*$3)+"/$9$"*$'"8!**H9$%"/$(!#8!'",-)%,-$'"0.*1J.(0)".6!"1'090)%"/!"
problema em instâncias menores do mesmo tipo de problema. 
l)%$"*)%0$.1)'",-$")"17(.0()"/$"/090*6!"$"(!.,-0*1)"(!*1-#)")8'$*$.-
1)'"/$*$#8$.&!"#$%&!'",-)./!")*"0.*1J.(0)*"!F10/)*"(!#")"/$(!#8!*056!"
1N#")8'!=0#)/)#$.1$"!"#$*#!"1)#).&!<
Uma instância trivial"7"-#)"0.*1J.(0)",-$".6!"8!/$"*$'"/$(!#8!*1)+"
#)*"(-3)"*!%-56!"7"#-01!"*0#8%$*"/$"*$'"()%(-%)/)<"Q!'"$=$#8%!+"!'/$.)'"
-#)" %0*1)"(!.*101-H/)"/$")8$.)*"-#"$%$#$.1!"7"-#)" 0.*1J.(0)" 1'090)%"/!"
problema da ordenação.
>%7#"/0**!+"/$9$"*$'"*$#8'$"8!**H9$%"-10%0Y)'")*"*!%-5A$*"!F10/)*"(!#"
)"'$*!%-56!"/)*"0.*1J.(0)*"#$.!'$*"8)')"(&$;)'")"-#)"*!%-56!"/)"0.*1J.(0)"
!'0;0.)%<"[!#!"9$'$#!*"#)0*")/0).1$+"!"8'!F%$#)"/)"!'/$.)56!"1$#"$**)*"
duas propriedades estruturais e, portanto, pode ser resolvido por divisão e 
(!.,-0*1)<
No Mergesort dividimos a lista em duas metades. Essas metades são 
!'/$.)/)*"'$(-'*09)#$.1$"?-*)./!"!"8'S8'0!"L$';$*!'1@"$"/$8!0*"*6!"inter-
caladas<"^#F!')"*$3)"8!**H9$%"/$*('$9$'"!"L$';$*!'1"*$#"2)Y$'"-*!"/$"'$-
cursividade, a versão recursiva desse é algoritmo é elegante e sucinta, como 
vemos a seguir.
ALGORITMO MERGESORT 
 ENTRADA: UM VETOR L E AS POSIÇÕES INICIO E FIM 
 SAÍDA: O VETOR L EM ORDEM CRESCENTE DA POSIÇÃO INICIO ATÉ
 A POSIÇÃO FIM 
 
 3! 454647 8 9: 
 :+47 ; <454647 = 9:>?@ ?? A4B4CD7 45E+4FG 
 SE inicio < meio 
 MERGESORT(L, inicio, meio) 
 3! :+47 = H 8 9: 
 I!JK!3'J&<,L :+47 = HL 9:> 
 I!JK!<,L 454647L :+47L 9:>
FIM {MERGESORT}
Algoritmo 2.6: Mergesort
MF*$'9$",-$")" 0.1$'()%)56!"/!" 0.1$'9)%!")" *$'"!'/$.)/!"7" 2$01)" (!#"
o Procedimento Merge descrito mais adiante. Tal procedimento é a parte 
principal do Mergesort e é nele onde os elementos são movimentados para 
)*"8!*05A$*")/$,-)/)*<"
 $**$"8'!($/0#$.1!"2)Y$#!*"-*!"/)*"9)'049$0*"0"$"3"8)')"8$'(!''$'")"
#$1)/$" $*,-$'/)" $" )"#$1)/$" /0'$01)+" '$*8$(109)#$.1$<" ^#" ()/)" 01$')56!"
(!#8)')#!*"!"$%$#$.1!".)"8!*056!"0"(!#"!"$%$#$.1!".)"8!*056!"3<"M"#$.!'"
/$%$*"7"(!80)/!"8)')"-#"9$1!'")-=0%0)'<"^**$"8'!($/0#$.1!"7"'$8$10/!")17"
,-$"-#)"/)*"/-)*"#$1)/$*"1$.&)"*0/!"1!1)%#$.1$"(!80)/)"8)')"!"9$1!'")--
=0%0)'<"O$")%;-.*"$%$#$.1!*"/)"#$1)/$"$*,-$'/)".6!"109$'$#"*0/!"(!80)/!*"
8)')"!"9$1!'")-=0%0)'+"$%$*"/$9$#"*$'"(!80)/!*"8)')"!"K.)%"/!"0.1$'9)%!<"_0-
.)%#$.1$+"(!80)#!*"!*"$%$#$.1!*"/!"9$1!'")-=0%0)'"/$"9!%1)"8)')"!"0.1$'9)%!<"
31PESQUISA E ORDENAÇÃO DE DADOS
PROCEDIMENTO MERGE 
 ENTRADA: UM VETOR L E AS POSIÇÕES INICIO, MEIO E FIM 
 (L TEM QUE ESTAR EM ORDEM CRESCENTE DA POSIÇÃO 
 INICIO ATÉ MEIO E DA POSIÇÃO MEIO + 1 ATÉ FIM) 
 SAÍDA: O VETOR L EM ORDEM CRESCENTE DA POSIÇÃO INICIO ATÉ 
 A POSIÇÃO FIM 
 
i = inicio, j = meio + 1, k = 0 
!"#$%"&' 4 M :+47 + ( M 9: 
 3! ,-4. M ,-(. 
 AUX[k] = L[i], i = i + 1 
 SENAO 
 AUX[k] = L[j], j = j + 1 
 k = k + 1 
3! 4 M :+47 
 PARA j = meio até i(passo -1) 
 ,-9:N:+47=(. ; ,-(. 
PARA i=0 ate k-1 
 L[i+inicio] = AUX[i]
FIM {MERGE}
Algoritmo 2.7: Procedimento Merge
a#)").4%0*$"(-0/)/!*)"/$**$"8'!($/0#$.1!".!*" %$9)")"(!.(%-0'",-$"
$%$"'$,-$'"1$#8!"%0.$)'#$.1$"8'!8!'(0!.)%")!"1)#).&!"/!"0.1$'9)%!<"l)#!*"
(&)#)'"/$"."!"1)#).&!"/!"0.1$'9)%!+"!-"*$3)+"."b"K#"\"0.0(0!"j"P<"MF*$'9$"
,-$")"(!./056!"/!"8'0#$0'!"%)5!"*!#$.1$"7"9$'/)/$0')"*$"0"m"#$0!"$"3"m"K#<"
V!;!+"8)')",-$"!"%)5!"(!.10.-$"$"*$'"$=$(-1)/!"7"8'$(0*!"1$'#!*"0"j"3"m"#$0!"
j"K#<
MF*$'9$",-$"0.0(0)%#$.1$"0"j"3"b"0.0(0!"j"#$0!"j"P<"[!#!")"()/)"01$')56!"
/!"8'0#$0'!"%)5!"!-"0"!-"3"7"0.('$#$.1)/!+")8S*"."\"P"01$')5A$*"1$'$#!*h
0"j"3"b"0.0(0!"j"#$0!"j"P"j"."\"P"
0"j"3"b"0.0(0!"j"#$0!"j".
0"j"3"b"0.0(0!"j"#$0!"j"K#"\"0.0(0!"j"P"
0"j"3"b"#$0!"j"K#"j"P
]$**)"2!'#)+")8S*".!"#4=0#!"."\"P"01$')5A$*""")"(!./056!"/!"8'0#$0'!"
%)5!"*$'4"90!%)/)<"[%)')#$.1$+"!"*$;-./!"%)5!+"*$"$=$(-1)/!+"1$'4".!"#4-
=0#!".DB"01$')5A$*<" !1$",-$")"()/)"01$')56!"/!"8'0#$0'!"%)5!")"9)'049$%"n"
7"0.('$#$.1)/)<"]$**)"2!'#)+")",-).10/)/$"/$"01$')5A$*"/!"8'0#$0'!"%)5!"
*$'4"n<"[!#!"n"7".!"#4=0#!"."\"P"$"!"R%10#!"%)5!"1$'4"n"01$')5A$*+"(!.(%--
H#!*",-$"!"Q'!($/0#$.1!"L$';$"'$,-$'"1$#8!"%0.$)'<"MF*$'9$")0./)",-$"!"
Q'!($/0#$.1!"L$';$"2)Y"-*!"/!"9$1!'">ao"$+"8!'1).1!+"'$,-$'"$*8)5!"%0.$)'<
>%7#"/0**!+".!1$",-$".)"(!#8)')56!"(!.10/)".!"8'0#$0'!"%)5!+"*$"Vp0q"
$"Vp3q"2!'$#"0;-)0*+"7"(!80)/!"Vp0q"8)')"!"9$1!'")-=0%0)'"$"0**!")"8'$*$'9)")"
ordem relativa entre os elementos repetidos. Esse cuidado na implementa-
56!"2)Y"(!#",-$"!"Q'!($/0#$.1!"L$';$"2)5)"*$#8'$"0.1$'()%)5A$*"$*149$0*<"
[!#!"(!.*$,-N.(0)+"!"L$';$*!'1"1)#F7#"7"$*149$%<
>"K;-')")"*$;-0'"0%-*1')"!"2-.(0!.)#$.1!"/!"Q'!($/0#$.1!"L$';$<"MF-
*$'9$",-$"!"0.1$'9)%!"/$"V",-$"9)0"/)"8!*056!"E E[EM")17"L^EM"$"!"0.1$'9)%!"
,-$"9)0"/$"L^EM"j"P")17"_EL"34"$*16!"$#"!'/$#"('$*($.1$<
32 PESQUISA E ORDENAÇÃO DE DADOS
 10 11 12 13 14 15 16 17 
L ... 1 4 7 13 2 4 5 6 ... 
 INICIO MEIO FIM 
 0 1 2 3 4 5 6 
AUX 1 2 4 4 5 6 
 
 10 11 12 13 14 15 16 17 
L ... 1 2 4 4 5 6 7 13 ... 
 INICIO FIM 
Figura 2.6: Exemplo de intercalação
 !"!#!#$%&!'()"!#Mergesort foi descrito de maneira recursiva, pode-
"!*#+,-(%"./).#+,0.'#*1,#,/2%(*.#1)(%(0,/3!#+4'"1%,*#3.#'.-!''5/-(,6#7,',#
(**!8#9,"!*#3./!),'#:!'#;</=#!#).":!#'.>1.'(3!#:,',#!'3./,'#1"#(/).'9,%!#
3.#),",/?!#/6#@./3!#,**("#!#).":!#/.-.**2'(!#:,',#!'3./,'#1"#(/).'9,%!#
3.# ),",/?!# /AB# *.'2# ;</AB=6# !"!# !# 7'!-.3("./)!#C.'&.# '.>1.'# ).":!#
%(/.,'8#:!3."!*#*1:!'#>1.#.%.# '.>1.'# ).":!#-/# <!/3.#-#D#1",#-!/*),/).#
:!*()(9,=6#;."!*#./)E!#,#*.&1(/).#+4'"1%,#3.#'.-!''5/-(,#:,',#;F
;</=#G#B;</AB=#H#-/
;<I=#G#-
7!3."!*#'.*!%9.'#.**,#+4'"1%,#+,-(%"./).#1)(%(0,/3!#!#método da ite-
ração#*1:!/3!#/#G#Bk. A partir da recorrência original, podemos obter as 
*.&1(/).*#'.-!''5/-(,*F
;</=#G#B;</AB=#H#-/
B;</AB=#G#J;</AJ=#H#-/
J;</AJ=#G#K;</AK=#H#-/
...
Bk-1;</ABk-1=#G#Bk;</ABk=#H#-/
Bk;</=#G#Bkc
@!",/3!# ),(*# +4'"1%,*#-?.&,"!*#,#;</=#G#-/L#H#Bk-6#M."N'.O*.#3.#
>1.#*1:!"!*#/#G#Bk8#%!&!8#L#G#%!&
B
/6#@./3!#,**("8#;</=#G#-/%!&
B
/#H#-/6# !/O
-%1P"!*#>1.#,#-!":%.Q(3,3.# ).":!',%#3!#$%&!'()"!#C.'&.*!')#:.')./-.#,#
 </%!&/=6
R,"!*#,&!',#3./!),'#:!'#S</=#!#.*:,T!#.Q)',#3.#"."4'(,#'.>1.'(3!#
:,',#!'3./,'#1"#(/).'9,%!#3.#),",/?!#/6# !"!#!#7'!-.3("./)!#C.'&.#'.O
>1.'#.*:,T!# %(/.,'#.#,#"."4'(,#1)(%(0,3,#/1",#-?,",3,#'.-1'*(9,#:!3.#
Esse método é descrito e 
.Q.":%(U#-,3!#/!#.Q-.%./O
te livro Algoritmos – Teo-
'(,# .# 7'2)(-,8# 3.# !'"./#
et al.
33PESQUISA E ORDENAÇÃO DE DADOS
*.'#'.,:'!9.(),3,#/,#-?,",3,#'.-1'*(9,#*.&1(/).8#)."!*#./)E!#,#*.&1(/).#
+4'"1%,#3.#'.-!''5/-(,#:,',#SF
S</=#G#",Q<S</AB=8#-/=
S<I=#G#-
V!9,"./).#:!3."!*#'.*!%9.'#.**,#+4'"1%,#1)(%(0,/3!#!#"D)!3!#3,#().-
',TE!8#!N)./3!#S</=#G#-/6# !/-%1P"!*#>1.#,#-!":%.Q(3,3.#.*:,-(,%#3!#$%&!-
ritmo Mergesort pertence a </=6#W(+.'./).#3.#)!3!*#!*#"D)!3!*#>1.#.*)13,-
mos anteriormente, o Mergesort não é in situ.
8. Quicksort
S**.#"D)!3!8#3.*./9!%9(3!#."#IXYZ#:!'# 6#$6#[6#\!,'.#.#:1N%(-,3!#
."#IXYB8#D#),%9.0#!#",(*#1)(%(0,3!#3.#)!3!*#!*#"D)!3!*#3.#!'3./,TE!6#]**!#
!-!''.#:!'>1.#>1,*.#*.":'.#!#^1(-L*!')#D#*(&/(U-,)(9,"./).#",(*#'2:(3!#
3!#>1.#)!3!*#!*#3.",(*#"D)!3!*#3.#!'3./,TE!#N,*.,3!*#."#-!":,',TE!6#
$%D"#3(**!8#*1,*#-,',-).'P*)(-,*#+,0."#-!"#>1.#.%.8#,**("#-!"!#!#C.'&.-
*!')8#:!**,#*.'#+,-(%"./).#:,',%.%(0,3!6#S%.#),"ND"#:!3.#*.'#,3,:),3!#:,',#
'.,%(0,'#!'3./,TE!#.Q).'/,#<^1(-L*!')#SQ).'/!=6
_"#,*:.-)!#>1.#)!'/,#!#^1(-L*!')#"1()!#(/).'.**,/).#*!N#!#:!/)!#3.#
9(*)!#).4'(-!#D#!#+,)!#3.#>1.8#."N!',#."#&.',%#.%.#*.`,#.Q)'.","./).#'2:(3!8#
.Q(*)."#-,*!*#<"1()!#','!*8#D#9.'3,3.=#."#>1.#*.1#3.*.":./?!#D#N."#'1("8#
-?.&,/3!#,#*.'#:(!'#3!#>1.#!#3.#"D)!3!*#3.#!'3./,TE!#-!/*(3.',3!*#(/+.'(!-
'.*#-!"!#!*#"D)!3!*#a!%?,8#]/*.'TE!#.#@.%.TE!6
Assim como o Mergesort, o Quicksort também é baseado na estratégia 
3.#3(9(*E!#.#-!/>1(*),6#b-!''.#>1.8#./>1,/)!#/!#C.'&.*!')#,#+,*.#3.#3(9(*E!#
D#)'(9(,%#.#,#+,*.#3.#-!/>1(*),#D#)',N,%?!*,8#/!#^1(-L*!')8#-!"#9.'."!*#,#
*.&1('8#,-!/).-.#!#-!/)'2'(!8#,#+,*.#3.#3(9(*E!#D#)',N,%?!*,#.#,#+,*.#3.#-!/-
>1(*),#D#)'(9(,%6
V.**.#"D)!3!8#,#%(*),#D#3(9(3(3,#."#:,').#.*>1.'3,#.#:,').#3('.(),8#*./-
3!#>1.#!*#.%."./)!*#3,#:,').#.*>1.'3,#*E!#)!3!*#"./!'.*#>1.#!*#.%."./)!*#
3,#:,').#3('.(),6#S**,#+,*.#3!#"D)!3!#D#-?,",3,#3.#partição. 
Em seguida, as duas partes são ordenadas recursivamente (usando o 
:'4:'(!#^1(-L*!')=6#$#%(*),#.*),'2#./)E!#!'3./,3,6
_",#.*)',)D&(,#:,',#+,0.'#,#:,')(TE!#D#.*-!%?.'#1"#9,%!'#-!"!#pivô e 
./)E!#-!%!-,'#/,#:,').#.*>1.'3,#!*#.%."./)!*#"./!'.*#!1#(&1,(*#,!#:(9c#.#
/,#:,').#3('.(),#!*#.%."./)!*#",(!'.*#>1.#!#:(9c6#
S"N!',#.Q(*),"#3(9.'*,*#",/.(',*#3.#.*-!%?.'#!#:(9c8#,%&1",*#3,*#
>1,(*#*.'E!#,:'.*./),3,*#/.**,#*.TE!8#,3!),'."!*#,#:'(/-P:(!#1",#.*)',-
)D&(,#.Q)'.","./).#*(":%.*8#",*#>1.#-!*)1",#,:'.*./),'#'.*1%),3!*#:'2-
ticos muito bons. Além disso, tal estratégia facilita perceber os casos em 
>1.#!#:'!-.3("./)!#3.#:,')(TE!#/E!#3(9(3.#,#%(*),#3.#",/.(',#.>1(%(N',3,6#
W.**,#+!'",8#)!'/,O*.#",(*#+2-(%#-,',-).'(0,'#.#,/,%(*,'#!#:(!'#-,*!#3!#CD-
todo Quicksort.
_)(%(0,'."!*# -!"!#:(9c# !# :'(".('!# .%."./)!#3,# %(*),6#V.**.# -,*!8# !#
:(9c#3.9.#*.'#-!%!-,3!#./)'.#,*#31,*#:,').*6#b#7'!-.3("./)!#7,')(TE!8#>1.#
implementa tal estratégia, é descrito a seguir.
34 PESQUISA E ORDENAÇÃO DE DADOS
... !"#$ PIVÔ > PIVÔ ...
INICIO j FIM
Figura 2.7: Partição
PROCEDIMENTO PARTIÇÃO 
 ENTRADA: UM VETOR L E AS POSIÇÕES INICIO E FIM 
 !"#$"%&' ()* +,- ./010203455./&674 8 ./&4 - 
 L[j+1]..L[FIM] > L[j] 
 // j é a posição onde será colocado o pivô, como 
%%%%%&&%'()*+,-./%0-%12),-%-3-'4/
 PIVO = L[INICIO], i = INICIO + 1, j = FIM 
%%567896:;%'% %< 
%%%%567896:;%'% %<%=%>?'@% %!"#; 
 i = i + 1 
 ENQUANTO L[j] > PIVO 
 j = j - 1 
%%%%A5%'% %< 
 TROCA(L[i],L[j]) 
 i = i + 1, j = j - 1 
 TROCA(L[INICIO], L[j]) 
 DEVOLVA j
FIM {PARTIÇÃO}
Algoritmo 2.8: Procedimento Partição
V!#7'!-.3("./)!#7,')(TE!#,#9,'(29.%# (#,9,/T,#,)D#./-!/)','#1"#.%.-
"./)!#",(!'#3!#>1.#!#:(9c#.#,#9,'(29.%#`#'.-1,#,)D#./-!/)','#1"#.%."./)!#
"./!'#!1#(&1,%#,!#:(9c6#d#+.(),#./)E!#,#)'!-,#3!#.%."./)!#>1.#.*)2#/,#:!-
*(TE!#(#-!"#!#.%."./)!#>1.#.*)2#/,#:!*(TE!#`6#S**.#:'!-.**!#D#'.:.)(3!#,)D#
).'"!*#(#e#`6#7,',#U/,%(0,'8#!#:(9c#D#-!%!-,3!#./)'.#,*#31,*#:,').*#+,0./3!#
)'!-,<Mf]V] ]bg8#Mf`g=6#$#:!*(TE!#`#D#3.9!%9(3,#,!#-?,",3!'#3!#:'!-.3("./)!6
$#'.&(E!#-'P)(-,#3!#7'!-.3("./)!#7,')(TE!#D#-!/*)()1P3,#3!*#3!(*#%,T!*#
",(*#(/).'/!*6#@.`,#/#!#),",/?!#3!#(/).'9,%!6#bN*.'9.#>1.#(/(-(,%"./).#`#
h#(#G#/#h#B6#V!).#,(/3,#>1.#,#-,3,#().',TE!#3.#1"#3!*#%,T!*#(/).'/!*#!1#(#D#
(/-'."./),3!#!1#`#D#3.-'."./),3!6#]**!#*(&/(U-,#>1.#,#-,3,#().',TE!#3.#1"#
3.**.*#%,T!*#,#.Q:'.**E!#`#h#(#D#3.-'."./),3,#3.#1",#1/(3,3.6# !/*.>1./-
)."./).8#,:4*#/!#"2Q("!#/#h#I#().',Ti.*#3.**.*#%,T!*#).'."!*#` #h#(#G#OI#!#>1.#
(":%(-,#>1.#`#*.'2#"./!'#3!#>1.#(6#b#%,T!#*.'2#./)E!#U/,%(0,3!6# !/-%1P"!*#
>1.#!#7'!-.3("./)!#7,')(TE!#'.>1.'#).":!#%(/.,'6# %,',"./).8#.**.#:'!-.-
3("./)!#)."#-!":%.Q(3,3.#.*:,-(,%#-!/*),/).6
V,#U&1',#B6K#D#(%1*)',3,#,#:,')(TE!#3.#1",#%(*),6#bN*.'9.#>1.#/.**.#
.Q.":%!#>1.#,#:,')(TE!#U-!1#.>1(%(N',3,8#:!(*#>1,)'!#.%."./)!*#U-,',"#j#
.*>1.'3,#3!#:(9c#.#)'5*#.%."./)!*#U-,',"#j#3('.(),#3!#:(9c6
 10 11 12 13 14 15 16 17 
L ... 5 8 4 2 7 3 9 4 ... 
 INICIO FIM 
1ª troca 
2ª troca 
3ª troca 
35PESQUISA E ORDENAÇÃO DE DADOS
 10 11 12 13 14 15 16 17 
L ... 3 4 4 2 5 7 9 8 ... 
 j 
Figura 2.8: Exemplo de partição equilibrada
 !""!#!$!%&'()#&!*+!,!%("#-.!#(#/*(+!01%!23(#/4*3156(#&(0!#127!*-
3!*#4#(*0!%#!$1"3!23!#!23*!#("#!'!%!23("#*!&!310("8#9(2"!-.!23!%!23!)#(#
Quicksort é não-estável.
:!#(#!'!%!23(#!"+(';10(#+(%(#&17<#=(*#(#%41(*#!'!%!23(#0(#123!*74'()#
3!*!%("#.%4#&4*3156(#0!"!-.1'1,*404)#+(%(# 1'."3*40(#24#>?.*4#4#"!?.1*8#
 (3!#-.!#4&!24"#.%4#3*(+4#"!*@#!$!+.34048
 10 11 12 13 14 15 16 17 
L ... 8 7 6 5 4 3 2 1 ... 
 INICIO FIM 
 10 11 12 13 14 15 16 17 
L ... 1 7 6 5 4 3 2 8 ... 
 j 
Figura 2.9: Exemplo de partição desequilibrada
A# =@+1'#&!*+!,!*#-.!#"!#(#%!2(*#!'!%!23(#0(# 123!*74'(# =(*#!"+(';10(#
+(%(#&17<#2!2;.%4#3*(+4#"!*@#!=!3.4048#B!*!%("#(.3*4#&4*3156(#0!"!-.1-
'1,*4048#C%#4%,("#("#+4"("#.%4#04"#%!340!"#&*(0.D104"#+(%#4#&4*3156(#
>+4*@#74D14#!#4#(.3*4# 3!*@# 3(0("#("#!'!%!23("#0(# 123!*74'(#!$+!3(#(#&17<8#
C""!# =43(# 3!*@#.%#1%&4+3(# 1%&(*3423!#"(,*!#(#0!"!%&!2;(#0(#E.1+F"(*3#
como veremos mais adiante.
G!"+*!7!%("#4#"!?.1*#.%4#7!*"6(#*!+.*"174#0(#E.1+F"(*38
ALGORITMO QUICKSORT 
 ENTRADA: UM VETOR L E AS POSIÇÕES INICIO E FIM 
 SAÍDA: O VETOR L EM ORDEM CRESCENTE DA POSIÇÃO INICIO ATÉ
 A POSIÇÃO FIM 
 
 SE INICIO < FIM 
 j = PARTICAO(L, INICIO, FIM) 
 SE INICIO < j - 1 
 QUICKSORT(L, INICIO, j - 1) 
 SE j + 1 < FIM 
 QUICKSORT(L, j + 1, FIM)
FIM {QUICKSORT}
Algoritmo 2.9: Quicksort
/4*4#424'1"4*#(#H'?(*13%(#E.1+F"(*3#74%("#0!2(34*#&(*#BI2J#(#3!%&(#
*!-.!*10(#&4*4#(*0!24*#.%#123!*74'(#0!#34%42;(#2#!#&(*#CI2J#(#!"&45(#!$-
3*4#*!-.!*10(#&4*4#(*0!24*#.%#123!*74'(#0!#34%42;(#28# (#&1(*#+4"()#-.!#
(+(**!#-.420(#3(04"#4"#!"+(';4"#0(#&17<#*!+4!%#"!%&*!#"(,*!#.%#!'!%!2-
3(#!$3*!%(#I(#%41(*#(.#(#%!2(*J#0(#123!*74'()#4#+(%&'!$1040!#3!%&(*4'#0(#
E.1+F"(*3#K#0404#&(*L
36 PESQUISA E ORDENAÇÃO DE DADOS
BI2J#M#BI2#N#OJ#P#+2
BIOJ#M#+
C""4#=Q*%.'4#&(0!#"!*#=4+1'%!23!#*!"('7104#*!".'3420(#!%#BI2J#M#I2R#S#2JTR8#
H#+(%&'!$1040!#!"&4+14'#0(#E.1+F"(*3#2(#&1(*#+4"(#K#0404#&(*L
CI2J#M#CI2#N#OJ#P#+
CIOJ#M#+
U!"('7!20(#!""4#=Q*%.'4#(,3!%("#CI2J#M#+28#9(2+'.V%("#-.!#2(#&1(*#
+4"(#(#H'?(*13%(#E.1+F"(*3#*!-.!*#3!%&(# (nRJ#!#!"&45(# I2J8#/4*4#2(""4#
".*&*!"4)#!""4#+(%&'!$1040!#3!%&(*4'#K#36(#*.1%#-.423(#4"#0("#%K3(0("#
W(';4)#X2"!*56(#!#:!'!56(#!#!""4#+(%&'!$1040!#!"&4+14'#K#36(#*.1%#-.423(#
4#0(#Y!*?!"(*38#:(%!S"!#4#1""(#(#=43(#0!#-.!#(#E.1+F"(*3#K#26(S!"3@7!'#!#
!236(#+(2+'.V%("#-.!#2(#&1(*#+4"(#(#E.1+F"(*3#K#.%#0("#&1(*!"#%K3(0("#0!#
ordenação.
A#=@+1'#&!*+!,!*#-.!#+(%#(#+*13K*1(#0!#!"+(';4#0(#&17<#-.!#40(34%(")#
"!#4# '1"34#!"317!*# 127!*"4%!23!#(*0!2404)# 3(0("#("#&17<"#!"+(';10("#"!*6(#
!'!%!23("#!$3*!%("#0!#"!."#123!*74'("#!)#&(*3423()#*!+41*!%("#2(#&1(*#+4"(#
0(#E.1+F"(*38#/4*4#2(""4#".*&*!"4)#"!#4#'1"34#Z@#!"317!*#(*0!2404)#3(0("#("#
&17<"#!"+(';10("#34%,K%#"!*6(#!'!%!23("#!$3*!%("#0!#"!."#123!*74'("#!#2(S
74%!23!#*!+41*!%("#2(#&1(*#+4"(#0(#E.1+F"(*38#[!'1D%!23!)#4#(+(**\2+14#0(#
&1(*#+4"(#K#!$3*!%4%!23!#*4*48
 (#%!';(*#+4"()#-.!#(+(**!#-.420(#4"#!"+(';4"#0(#&17<#*!+4!%#"!%S
pre sobre a mediana#0(#123!*74'()#4#+(%&'!$1040!#3!%&(*4'#0(#E.1+F"(*3#K#
0404#&(*L
BI2J#M#RBI2TRJ#P#+2
BIOJ#M#+
U!"('7!%("#!""4#=Q*%.'4#4(#01"+.31*#(#Y!*?!"(*3#!#"4,!%("#-.!#BI2J#! 
 I2'(?2J8#H#+(%&'!$1040!#!"&4+14'#0(#E.1+F"(*3#K#0404#&(*L
CI2J#M#CI2TRJ#P#+
CIOJ#M#+
U!"('7!20(#!""4#=Q*%.'4#+(2+'.V%("#-.!#CI2J#! I'(?2J8#:!20(#4""1%)#
2(#%!';(*#+4"(#4#+(%&'!$1040!#3!%&(*4'#0(#E.1+F"(*3#&!*3!2+!#4# I2'(?2J#
!#4#+(%&'!$1040!#!"&4+14'#&!*3!2+!#4# I'(?2J8#C""4"#34%,K%#"6(#4"#+(%&'!S
$1040!"#0(#E.1+F"(*3#2(#+4"(#%K01(8
/(0!%("#.31'1D4*# !"3*43K?14"#%41"# !'4,(*404"#&4*4# !"+(';4#0(#&17<)#
+(%#(#(,Z!317(#0!#&*(0.D1*#&4*315]!"#%41"#!-.1'1,*404"8#C1"#4'?.%4"#10!14"L
 ! ^31'1D4*#4#%K014#4*13%K31+4#0(#123!*74'(8
 ! ^31'1D4*#4#%!01424#0(#123!*74'(8
 ! C"+(';!*#4'!43(*14%!23!#.%#!'!%!23(#0(#123!*74'(8
Nos dois primeiros casos precisaremos de tempo linear para esco-
';!*#(#pivô)#%4"#1""(#26(#4=!34*@#4#+(%&'!$1040!#3!%&(*4'#4""123Q31+4#04#
No livro Algoritmos – Teo-
*14#!#/*@31+4#K#0!"+*13(#.%#
método para calcular a 
mediana em tempo linear.
37PESQUISA E ORDENAÇÃO DE DADOS
&4*3156(#-.!#K#'12!4*8# (#!23423()#!%#3!*%("#4,"('.3(")#(#3!%&(#*!-.!*10(#
&!'4#&4*3156(#4.%!234*@8#H'K%#01""()#(#&17<#&(0!*@#26(#"!*#.%#!'!%!23(#
0(#123!*74'(#!#1""(#!$1?1*@#4'?.%4"#4'3!*45]!"#401+1(241"#0(#/*(+!01%!23(#
Partição.
 (#_'31%(#+4"(#3!%("#4#7!*"6(#+(2;!+104#+(%(#Quicksort probabilísti-
co8#H#&*12+1&4'#74234?!%#0!""4#7!*"6(#K#(#=43(#0!#3(*24*#1%&(""V7!'#?4*4231*#
-.!#(#E.1+F"(*3#741#*!-.!*!*#3!%&(#-.40*@31+(#&4*4#.%4#0!3!*%12404#'1"348#
9(%(#71%("#423!*1(*%!23!)#4(#!"+(';!*#0!3!*%121"31+4%!23!#(#&17<)#K#&(""V-
7!'#-.!#4'?.K%#01"&("3(#4#0!"%(*4'1D4*#(#E.1+F"(*3#+(2"3*.4#'1"34"#&4*4#4"#
-.41"#"!.#0!"!%&!2;(#"!Z4#-.40*@31+(8#X""(#26(#K#%41"#&(""V7!'#24#7!*"6(#
&*(,4,1'V"31+4#0(#4'?(*13%(8#
9. Heaps Binários
Um heap#K#.%4#+('!56(#0!#040("#&4*+14'%!23!#(*0!240("8# .%#;!4&#
crescente#K#7@'104#4#"!?.123!#&*(&*1!040!L#`(#&41#K#%!2(*#(.#1?.4'#4("#"!."#
>';("a8# .%#;!4&#decrescente)#3!%("#4#&*(&*1!040!#42@'(?4L#`(#&41#K#%41(*#
(.#1?.4'#4("#"!."#>';("a8#C$1"3!%#017!*"("#31&("#0!#;!4&"L#,12@*1(")#,12(-
%141")#0!#[1,(24++1#!3+8#H,(*04*!%("#4&!24"#;!4&"#,12@*1("8
^%#;!4&#,12@*1(#"!#+4*4+3!*1D4#&!'(#=43(#0!#-.!#+404#!'!%!23(#&("".1#
2(#%@$1%(#0(1"#>';("8#/(0!%("#1%&'!%!234*#;!4&"#,12@*1("#."420(#.%4#
@*7(*!#,12@*148#B4'#@*7(*!#3!*@#3(0("#("#2V7!1"#+(%&'!3(")#+(%#!$+!56(#0(#
_'31%(#2V7!')#-.!#&(0!#!"34*#12+(%&'!3(8#H'K%#01""()#("#2V7!1"#"6(#&*!!2+;1-
0("#04#!"-.!*04#&4*4#4#01*!1348
 
3 
5 3 
10 7 
Figura 2.10: Exemplo de heap binário crescente armazenado numa árvore
^%#;!4&#,12@*1(#34%,K%#&(0!#"!*#1%&'!%!2340(#43*47K"#0!#.%#7!3(*8#
 !""!#+4"()#("#>';("#04#&("156(#1#"6(#4"#&("15]!"#R#b#1#!#R#b#1#P#O#IH#&("156(#
D!*(#0(#7!3(*#26(#K#.31'1D404J8#G1"+.31*!%("#!%#0!34';!"#+(%(#=4D!*#12"!*-
56(#!#+(%(#*!%(7!*#(#%!2(*#!'!%!23(#0!#.%#;!4&#,12@*1(#+*!"+!23!#1%&'!-
mentado num vetor.
1 R c d 5 6
c 5 c 7 10
Figura 2.11: Exemplo de heap binário crescente armazenado num vetor
e,"!*7!#-.!#2.%#;!4&#,12@*1(#+*!"+!23!#1%&'!%!2340(#2.%4#@*7(*!)#
(#%!2(*#74'(*#!"34*@#"!%&*!#24#*41D#04#@*7(*!8#:!#(#;!4&#,12@*1(#+*!"+!2-
3!# =(*# 1%&'!%!2340(#2.%#7!3(*)#(#%!2(*#74'(*#!"34*@#"!%&*!#24#&*1%!1*4#
&("156(#0(#7!3(*8#G!""4#=(*%4)#!2+(23*4*#(#%!2(*#74'(*#+(2310(#2.%#;!4&#
,12@*1(#+*!"+!23!#K#.%4#(&!*456(#-.!#&(0!#"!*#=!134#!%#3!%&(#+(2"3423!8#
H24'(?4%!23!)#(#%41(*#!'!%!23(#2.%#;!4&#,12@*1(#0!+*!"+!23!#!"34*@#"!%-
&*!#2(#"!.#12V+1(8
/4*4#1%&'!%!234*#.%#;!4&#,12@*1(#."420(#.%#7!3(*)#&(0!%("#."4*#
.%4#!"3*.3.*4#+(%#("#"!?.123!"#+4%&("L
38 PESQUISA E ORDENAÇÃO DE DADOS
 ! 7!3(*L#4*%4D!24#("#040("
 ! 34%42;(L#1201+4#(#34%42;(#0(#7!3(*
 ! .'31%4L#1201+4#4#_'31%4#&("156(#."404#0(#7!3(*
/4*4# 12"!*1*#.%#74'(*#$#2.%#;!4&#,12@*1(#0!7!%("# 12"!*1S'(#4&Q"#(#
_'31%(#!'!%!23(#!#0!&(1"#+(%&4*4*#+(%#"!.#&41)#3*(+420(S("#0!#&("156(#"!#
;(.7!*#2!+!""1040!8#B4'#&*(+!""(#K#*!&!310(#43K#-.!#$#"!Z4#%41(*#(.#1?.4'#
4(#"!.#&41#(.#43K#$#4312?1*#4#&("156(#O#0(#7!3(*8#e#4'?(*13%(#4#"!?.1*#1%&'!S
%!234#4#10!14#0!"+*134#2!""!#&4*@?*4=(8
ALGORITMO INSERE_HBC
 ENTRADA: UM HEAP BINÁRIO CRESCENTE H E UM VALOR X
 SAÍDA: SE HOUVER ESPAÇO DISPONIVEL, INSERE X EM H; 
 CASO CONTRÁRIO, DEVOLVE UM ERRO.
SE H.ultima = H.tamanho //HEAP OVERFLOW
 devolva ERRO 
H.ultima = H.ultima + 1
i = H.ultima
ENQUANTO i > 1 e H.vetor[i/2] > x // DIVISÃO INTEIRA
 H.vetor[i] = H.vetor[i/2]
 i = i/2
H.vetor[i] = x
FIM {INSERE_HBC}
Algoritmo 2.10: Insere_HBC
9'4*4%!23!)#4#*!?16(#+*V31+4#0(#H'?(*13%(#X2"!*!fgW9#K#(#'45(8#G!""4#
=(*%4)#(#3!%&(#*!-.!*10(#&!'(#4'?(*13%(#K#0!3!*%1240(#&!'4#-.4231040!#0!#
13!*45]!"#0(#'45(8#:!Z4#2#M#g8.'31%48# (3!#-.!#121+14'%!23!#1#M#2#!)#&(*3423()#
i possui "log
R
n##P#O#,13"#"#$%#&!'()#*os8#H#+404#13!*456(#0(#'45()#4#74*1@7!'#1#
&!*0!#.%#,13#"1?21>#+4317()#&(1"#(#74'(*#0!#1#K#43.4'1D40(#=4D!20(S"!#1#M#1TR8#
H&Q"#"log
R
n##13!*45]!")#1#3!*@#4&!24"#.%#,13#"1?21>#+4317(8#:!20(#4""1%)#3!*!S
%("#1#h#O#!#(#'45(#"!*@#>#24'1D40(8#H""1%)#4#-.4231040!#%@$1%4#0!#13!*45]!"#
do laço é "log
R
n#8#9(2+'.V%("#-.!#4#+(%&'!$1040!#3!%&(*4'#0(#H'?(*13%(#X2S
"!*!fgW9#&!*3!2+!#4#OI'(?2J8#
H#>#?.*4#4#"!?.1*#1'."3*4#4#12"!*56(#0(#74'(*#d#2.%#;!4&#,12@*1(#+*!"S
+!23!8#e,"!*7!#-.!#(#74'(*#i#!#0!&(1"#(#74'(*#j#&*!+1"4%#"!*#%(710("#&4*4#
-.!#(#74'(*#d#&(""4#"!*#+('(+40(#24#&("156(#R#0(#7!3(*8# (3!#41204#-.!#4#
inserção pode inverter a ordem entre os elementos repetidos.
1 2 3 4 5 6 7 8 9 10
3 5 3 7 10 8 3 7
 !"#$"%&!'$("$)%'!*+,-
1 2 3 4 5 6 7 8 9 10
3 4 3 5 10 8 3 7 7
 
1ª movimentação 
novo valor 
2ª movimentação 
Figura 2.12: Exemplo de inserção num heap binário crescente
./0-*"$'!1"$#-''23!4$*!/-3!*$5/$!4!/!%&-$65"465!*$(-$7!"#8$3"/-'$
()'95&)*$"#!%"'$"$*!/-+,-$(-$/!%-*$!4!/!%&-:$;-/-$3)/-'$"%&!*)-*/!%&!8$
-$/!%-*$!4!/!%&-$!'&"*<$'!/#*!$%"$#*)/!)*"$#-')+,-$(-$7!"#:
 =!$ >4?@'!$ A97,-$(!$=BC$D$-$
/")-*$$)%&!)*-$65!$D$/!%-*$
-5$$)E5"4$"$=:
39PESQUISA E ORDENAÇÃO DE DADOS
F"*"$*!/-3!*$-$/!%-*$!4!/!%&-$(!$5/$7!"#$0)%<*)-$9*!'9!%&!$)/#4!-
/!%&"(-$%5/$3!&-*8$/-3!/-'$-$G4&)/-$3"4-*$9-%&)(-$%-$7!"#$>#)3HC$#"*"$"$
#-')+,-$I$(-$3!&-*:$./$'!E5)("8$9-/#"*"/-'$-$#)3H$9-/$'!5'$J47-'8$&*-9"%-
(-@-$9-/$-$/!%-*$(!$'!5'$J47-'$'!$7-53!*$%!9!'')("(!:$.''!$#*-9!()/!%&-$
D$*!#!&)(-$"&D$65!$-$#)3H$'!1"$/!%-*$-5$)E5"4$"-'$'!5'$J47-'$-5$"&D$-$#)3H$
"&)%E)*$5/"$#-')+,-$65!$%,-$&!%7"$J47-':
ALGORITMO REMOVE_MENOR 
 ENTRADA: UM HEAP BINÁRIO CRESCENTE H 
 SAÍDA: SE H NÃO ESTIVER VAZIO, REMOVE E DEVOLVE O MENOR
 ELEMENTO DE H; CASO CONTRÁRIO; DEVOLVE UM ERRO 
 
 SE H.ultima = 0 //HEAP UNDERFLOW 
 devolva ERRO e PARE 
 valor= H.vetor[1] 
 H.vetor[1] = H.vetor[H.ultima] 
 H.ultima = H.ultima - 1 
 i = 1 
 !"#$%"&' ()*+ , -./01+23 4 -.541678+9 : -.541678)*+9; 6/
 (2*i < H.ultima e H.vetor[i] > H.vetor[2*i+1]) 
 menor = 2*i 
 <! )*+ = -./01+23 4 -.541678)*+>?9 , -.541678)*+9 
 menor= menor+1 
 TROCA(H.vetor[i], H.vetor[menor]) 
 i = menor 
DEVOLVA valor
FIM {REMOVE_MENOR}
Algoritmo
2.11: Remove_Menor
K$JE5*"$"$'!E5)*$/-'&*"$"$*!/-+,-$(-$/!%-*$!4!/!%&-$(!$5/$7!"#$
0)%<*)-$9*!'9!%&!:$L0'!*3!$65!$"#M'$/-3!*$-$3"4-*$IN$#"*"$"$#*)/!)*"$#-')-
+,-$(-$3!&-*8$#*!9)'"/-'$&*-9<@4-$9-/$-$3"4-*$O$!$(!#-)'$9-/$-$3"4-*$6 para 
*!'&"5*"*$"$-*(!%"+,-$#"*9)"4$(-$7!"#:$P-&!$")%("$65!$"$*!/-+,-$(-$/!%-*$
elemento pode inverter a ordem entre elementos repetidos.
1 2 3 4 5 6 7 8 9 10
2 4 3 5 6 8 6 9 10
 !"#$"%&!'$("$*!/-+,-
1 2 3 4 5 6 7 8 9 10
3 4 6 5 6 8 10 9
 
1ª movimentação 2ª troca 1ª troca 
Figura 2.13: Remoção do menor elemento num heap binário crescente
Q!1"$%$R$7:54&)/":$L0'!*3!$65!$7:54&)/"$S$T$#-''5)$ log
T
n!$0)&'$')E%)J-
9"&)3-':$U%)9)"4/!%&!8$"$3"*)<3!4$)$#-''5)$"#!%"'$5/$0)&$')E%)J9"&)3-:$K$9"("$
)&!*"+,-$(-$4"+-8$ )$E"%7"$5/$0)&$')E%)J9"&)3-:$K#M'$ log
T
n!$ )&!*"+V!'8$ )$&!*<$
 log
T
n!$W$I$0)&'$')E%)J9"&)3-'$!8$#-*&"%&-8$&!*!/-'$)$X$7:54&)/"ST:$;-%'!65!%-
&!/!%&!8$-$4"+-$'!*<$J%"4)Y"(-:$;-%9452/-'$65!$-$K4E-*)&/-$Z!/-3![\!%-*$
*!65!*$&!/#-$O>4-E%C:
40 PESQUISA E ORDENAÇÃO DE DADOS
10. Heapsort
F-(!/-'$5'"*$7!"#'$0)%<*)-'$#"*"$-*(!%"*$9-/$0"'&"%&!$!J$9)?%9)"$
!$!4!E]%9)":$L$\D&-(-$ !"#'-*&$D$0"'!"(-$%-$5'-$(!$7!"#$0)%<*)-:$U%)9)"4@
/!%&!8$)%'!*)/-'$-'$!4!/!%&-'$("$4)'&"$%5/$7!"#$0)%<*)-$9*!'9!%&!:$./$'!@
E5)("8$^"Y!/-'$'59!'')3"'$*!/-+V!'$(-$/!%-*$!4!/!%&-$(-$7!"#8$9-4-9"%(-$
-'$!4!/!%&-'$*!/-3)(-'$(-$7!"#$(!$3-4&"$%"$4)'&":$K$4)'&"$!'&"*<$!%&,-$!/$
ordem crescente.
ALGORITMO HEAP SORT
 ENTRADA: UM VETOR L COM N POSIÇÕES
 SAÍDA: O VETOR L EM ORDEM CRESCENTE
inicialize um HBC H com n posições
PARA i = 0 até n - 1
 INSERE_HBC(H, L[i])
PARA i = 0 até n - 1
 L[i] = REMOVE_MENOR(H)
FIM {HEAP SORT}
Algoritmo 2.12: Heapsort
P"$'!+,-$"%&!*)-*$/-'&*"/-'$65!$"$ )%'!*+,-$!$"$*!/-+,-$(-$/!%-*$
!4!/!%&-$*!65!*$ &!/#-$ 4-E"*2&/)9-$%-$ &"/"%7-$(-$7!"#:$Q!%(-$"'')/8$"$
9-/#4!=)("(!$&!/#-*"4$(-$ !"#'-*&$#!*&!%9!$"$">%4-E%C:$
;-/-$3)/-'$"%&!*)-*/!%&!8$"$)%'!*+,-$!$"$*!/-+,-$(-$/!%-*$!4!/!%&-$
(-$7!"#$%,-$#*!'!*3"/$"$-*(!/$*!4"&)3"$!=)'&!%&!$!%&*!$-'$!4!/!%&-'$*!#!@
&)(-':$;-/-$9-%'!65?%9)"$(!''!$^"&-8$-$ !"#'-*&$D$%,-@!'&<3!4:
_)%"4/!%&!8$"$9-/#4!=)("(!$!'#"9)"4$(-$K4E-*)&/-$ !"#'-*&$D$">%C:$P-$
!%&"%&-8$#-(!/-'$ ^"9)4/!%&!$"("#&"*$-$ !"#'-*&$#"*"$ ^"Y!*$-*(!%"+,-$ in 
situ:$F"*"$)''-8$(!3!/-'$5'"*$-$#*M#*)-$!'#"+-$(-$3!&-*$9-/-$7!"#:$P!''!$
9"'-$'5"$9-/#4!=)("(!$!'#"9)"4$(-$ !"#'-*&$'!*<$O>IC:
L$ '!&!$ /D&-(-'$ 65!$ (!'9*!3!/-'$ %!'&!$ 9"#2&54-$ "&D$ "E-*"$ 5&)4)Y"/$
9-/-$-#!*"+,-$^5%("/!%&"4$"$9-/#"*"+,-$(!$!4!/!%&-'$("$4)'&":$`$#-''23!4$
/-'&*"*$65!$&-(-$/D&-(-$(!$-*(!%"+,-$0"'!"(-$%"$-#!*"+,-$(!$9-/#"*"+,-$
*!65!*$&!/#-$ !"#$%n):$P-$!%&"%&-$!=)'&!/$/D&-(-'$(!$-*(!%"+,-$65!8$'-0$
certas condições, ordenam em tempo linear. Naturalmente, tais métodos não 
',-$0"'!"(-'$!/$9-/#"*"+,-:$a)'95&)*!/-'$"$'!E5)*$&*?'$(!''!'$/D&-(-':
 
 !"#$%&'"&()$*+
Esse método$^-)$#*-#-'&-$#-*$ "*-4($ :$Q!b"*($!/$Icde$!$^"Y$"$-*(!@
%"+,-$5'"%(-$"$)(!)"$(!$9-%&"E!/:$f/"$*!'&*)+,-$(!''!$/D&-(-$D$65!$!4!$
'-/!%&!$-*(!%"$4)'&"'$(!$%G/!*-'$%"&5*")':$
Essa não é uma restrição muito severa, pois podemos converter di-
3!*'-'$ &)#-'$ (!$ 4)'&"'$ !/$ 4)'&"'$ (!$ %G/!*-'$ %"&5*")':$ F-*$ !=!/#4-8$ 5/"$
4)'&"$(!$%G/!*-'$)%&!)*-'$-%(!$-$/!%-*$3"4-*$D$@=$#-(!$'!*$9-%3!*&)("$%5/"$
4)'&"$(!$%G/!*-'$%"&5*")'$'-/"%(-$=$"$9"("$!4!/!%&-$("$4)'&":$f/"$4)'&"$
(!$%G/!*-'$*"9)-%")'$#-(!$'!*$9-%3!*&)("$%5/"$4)'&"$(!$%G/!*-'$)%&!)*-'$
multiplicando-se os elementos da lista por uma constante apropriada. 
a!$^"&-8$'!/#*!$65!$!=)'&)*$5/"$0)1!+,-$!%&*!$-$&)#-$(-'$("(-'$("$4)'&"$
!$5/$'509-%15%&-$(-'$%"&5*")'$D$#-''23!4$9-%3!*&!*$"$4)'&"$!/$5/"$4)'&"$(!$
%G/!*-'$%"&5*")':$U%^!4)Y/!%&!8$"4E5/"'$(!''"'$9-%3!*'V!'$#-(!/$&!*$5/$
)/#"9&-$%!E"&)3-$'-0*!$-$(!'!/#!%7-$(-$/D&-(-:$
O leitor interessado pode-
*<$ !%9-%&*"*$ 5/"$ #*-3"$
desse fato no livro Algo-
*)&/-'$g$h!-*)"$ !$F*<&)9":$
>;-/!%$!&$"4:8$TNNTC:
#$(!%-&"$9-/#4!=)("(!$%-$
/!47-*$9"'-:
41PESQUISA E ORDENAÇÃO DE DADOS
Q!1"$%$-$&"/"%7-$("$4)'&"$!$i$-$/")-*$3"4-*$9-%&)(-$%"$4)'&":$_"Y!/-'$
5'-$(!$5/$3!&-*$;$9-/$i$W$I$#-')+V!':$P-$#*)/!)*-$4"+-$(-$K4E-*)&/-$;-5%-
&)%E'-*&8$(!'9*)&-$"$'!E5)*8$-$3!&-*$;$D$)%)9)"4)Y"(-$9-/$Y!*-':
P-$4"+-$'!E5)%&!8$9-%&"/-'$65"%&"'$3!Y!'$9"("$5/$(-'$!4!/!%&-'$(!$
N$"$i$"#"*!9!$%"$4)'&":$F"*"$^"Y!*$)''-8$#!*9-**!/-'$"$4)'&"$!$#"*"$9"("$3"4-*$
)$9-%&)(-$%"$4)'&"$)%9*!/!%&"/-'$(!$5/"$5%)("(!$"$#-')+,-$)$(-$3!&-*$;:$
a!''"$^-*/"8$"-$J%"4$(!''!$4"+-$9"("$#-')+,-$)$(!$;$)%()9"$65"%&"'$3!Y!'$-$
valor de i ocorre na lista.
./$'!E5)("8$^"Y!/-'$"$soma acumulada$(-$3!&-*$;:$F!*9-**!/-'$%--
3"/!%&!$-$3!&-*$;8$(!''"$3!Y$"$#"*&)*$("$'!E5%("$#-')+,-8$'-/"%(-$9"("$
posição i do vetor c com a posição anterior. O resultado da soma é guarda-
(-$%"$#*M#*)"$#-')+,-$):$K#M'$*!"4)Y"*$"$'-/"$"95/54"("8$9"("$#-')+,-$)$
(-$3!&-*$;$)%()9"*<$65"%&-'$!4!/!%&-'$("$4)'&"$',-$/!%-*!'$-5$)E5")'$"$):$
L03)"/!%&!8$'!$)$-9-**!$%"$4)'&"$!$;j)k$R$18$65"%(-$"$4)'&"$!'&)3!*$-*(!%"("$-$
3"4-*$)$(!3!*<$-95#"*$"$1@D')/"$#-')+,-$("$4)'&":
F!*9-**!/-'$/")'$5/"$3!Y$"$ 4)'&"8$(!''"$ 3!Y8$("$()*!)&"$#"*"$"$ !'-
65!*("$>#"*"$E"*"%&)*$65!$"$-*(!%"+,-$'!1"$!'&<3!4C$!$9-4-9"/-'$9"("$3"4-*$
)$9-%&)(-$%"$4)'&"$%"$#-')+,-$9j)k$g$I$(!$5/$3!&-*$"5=)4)"*:$F"*"$!3)&"*$65!$
/G4&)#4"'$9M#)"'$(!$5/$3"4-*$9-%&)(-$%"$4)'&"$'!1"/$9-4-9"("'$%5/"$/!'/"$
#-')+,-$(-$3!&-*$"5=)4)"*8$"#M'$9-4-9"*$5/$3"4-*$)$%-$3!&-*$"5=)4)"*8$(!9*!-
/!%&"/-'$(!$5/"$5%)("(!$"$#-')+,-$ )$(!$;:$P-$G4&)/-$ 4"+-8$9-#)"/-'$-$
3!&-*$"5=)4)"*$#"*"$"$4)'&":
ALGORITMO COUNTING SORT 
 ENTRADA: UM VETOR L CONTENDO N NÚMEROS NATURAIS NO
 INTERVALO DE 0 A K 
 SAÍDA: O VETOR L EM ORDEM CRESCENTE 
 
 PARA i = 0 até k // INICIALIZACAO DE C 
 c[i]=0 
 PARA i = 0 até n - 1 // CONTAGEM 
 c[L[i]]= c[L[i]] +1 
 PARA i = 1 até k // SOMA ACUMULADA 
 c[i]= c[i] + c[i-1] 
 PARA i= n - 1 até 0 (passo -1) // ORDENACAO 
 c[L[i]] = c[L[i]] - 1 
 aux[c[L[i]]]= L[i] 
 PARA i = 0 até n - 1 // COPIANDO AUX PARA L 
 L[i]= aux[i]
FIM {COUNTING SORT}
Algoritmo 2.13: Countingsort
L$K4E-*)&/-$;-5%&)%E'-*&$D$9-%'&)&52(-$(!$9)%9-$4"+-'$)%(!#!%(!%&!':$
Três desses laços gastam tempo ">%C$!$-'$-5&*-'$(-)'$E"'&"/$&!/#-$">iC:$
K4D/$()''-8$3!&-*$;$&!/$i$W$I$#-')+V!'$!$-$3!&-*$"5=$&!/$%$#-')+V!':$;-%-
9452/-'$65!$"$9-/#4!=)("(!$&!/#-*"4$!$"$9-/#4!=)("(!$!'#"9)"4$(-$;-5%-
tingsort pertencem a ">%$W$iC:$F"*"$"$94"''!$(!$4)'&"'$-%(!$i$%,-$D$/5)&-$
/")-*$(-$65!$%8$/")'$#*!9)'"/!%&!8$'!$i$% ">%C8$!%&,-$&")'$9-/#4!=)("(!'$
pertencem a ">%C:$$L$95)("(-$65!$&)3!/-'$"-$#!*9-**!*$"$4)'&"$(-$J%"4$#"*"$
-$)%29)-$%-$65"*&-$4"+-$E"*"%&!$"$!'&"0)4)("(!$(!$;-5%&)%E'-*&$:
P"$_)E5*"$T:Ie$!=)0)/-'$-$9-%&!G(-$(-$3!&-*$;$"-$J%"4$(!$9"("$4"+-$(-$
K4E-*)&/-$;-5%&)%E'-*&:$L$9-%&!G(-$(-$3!&-*$"5=$9-**!'#-%(!$l$4)'&"$-*)E)-
nal em ordem crescente.
42 PESQUISA E ORDENAÇÃO DE DADOS
0 1 T O e 5
m)'&"$-*)E)%"4 8 e 5 O 8 T
n!&-*$; 0 1 T O e 5 6 7 8
1º laço 0 0 0 0 0 0 0 0 0
0 1 T O e 5 6 7 8
To$4"+- 0 0 1 1 1 1 0 0 T
0 1 T O e 5 6 7 8
Oo$4"+- 0 0 1 T O e e e 6
0 1 T O e 5 6 7 8
eo$4"+- 0 0 0 1 T O e e e
0 1 T O e 5 6 7 8
5º laço 0 0 0 1 T O e e e
n!&-*$"5= 0 1 T O e 5
T O e 5 8 8
Figura 2.14: Ordenação com o Algoritmo Countingsort
12. Bucketsort
./0-*"$ !''!$/D&-(-$#!*/)&"$ -*(!%"*$ 4)'&"'$(!$%G/!*-'$65")'65!*8$
(!'9*!3!*!/-'$5/"$3!*',-$(!''!$/D&-(-$65!$-*(!%"$4)'&"'$(!$%G/!*-'$%,-$
negativos. 
Q!$"$ 4)'&"$"$'!*$-*(!%"("$&!/$%$!4!/!%&-'8$'!*<$5'"(-$5/$3!&-*$(!$
#-%&!)*-'$>059i!&C$9-/$%$#-')+V!':$Q!$-$/")-*$!4!/!%&-$("$4)'&"$D$i8$9"("$
#-')+,-$(-$059i!&$"#-%&"*<$#"*"$5/"$4)'&"$!%9"(!"("$%"$65"4$'!*,-$)%'!*)-
(-'$-'$!4!/!%&-'$("$4)'&"$65!$#!*&!%9!/$"-$)%&!*3"4-$j$$)$p$>i$W$IC$S$%$8$>)$W$IC$
p$>i$W$IC$S$%C:$L0'!*3!$65!$-$)%&!*3"4-$D$^ !97"(-$l$!'65!*("$!$"0!*&-$l$()*!)&":$
K$)(!)"$(-$/D&-(-$D$()3)()*$-$)%&!*3"4-$65!$3")$(!$N$"&D$i$!/$%$'50)%-
&!*3"4-'$
(!$/!'/-$ &"/"%7-:$;"("$ '50)%&!*3"4-$ !'&"*<$ "''-9)"(-$ "$5/"$
4)'&"$4)E"("$65!$)*<$9-%&!*$-'$!4!/!%&-'$("$4)'&"$65!$#!*&!%9!/$l65!4!$'5-
0)%&!*3"4-:$F-*$!=!/#4-8$'!$"$4)'&"$&!/$-)&-$!4!/!%&-'$D$-$/")-*$(!4!'$D$qI8$
&!*!/-'$-)&-$)%&!*3"4-'r$jN8$cC8$jc8$IsC8$:::8$jtO8$qTC:$K$#-')+,-$Y!*-$(-$059i!&$
"#-%&"*<$#"*"$5/"$4)'&"$!%9"(!"("$65!$)*<$9-%&!*$-'$!4!/!%&-'$("$4)'&"$65!$
',-$/")-*!'$-5$)E5")'$"$Y!*-$!$/!%-*!'$65!$c8$!$"'')/$#-*$()"%&!:
;7"/"*!/-'$-$059i!&$(!$3!&-*$u:$F"*"$9-%'&*5)*$"'$4)'&"'$!%9"(!"("'$
(!3!/-'$)%'!*)*$9"("$3"4-*$1$9-%&)(-$%"$4)'&"$"$'!*$-*(!%"("$%"$4)'&"$!%9"(!-
"("$"#-%&"("$#-*$uj$1$p$%$S$>i$W$ICk:$./$'!E5)("8$-*(!%"/-'$"'$4)'&"'$!%9"-
(!"("'$9-/$5/$/D&-(-$(!$-*(!%"+,-$65"465!*$>(!$#*!^!*?%9)"$!'&<3!4C:$K#M'$
)''-8$"$9-%9"&!%"+,-$("'$4)'&"'$!%9"(!"("'$#*-(5Y$"$4)'&"$-*)E)%"4$-*(!%"(":$
ALGORITMO BUCKET SORT 
 ENTRADA: UM VETOR L CONTENDO N NÚMEROS NO INTERVALO DE 
 0 ATÉ K 
 SAÍDA: O VETOR L EM ORDEM CRESCENTE 
 
PARA i = 0 até n - 1 //INICIALIZACAO 
 B[i] = NULO 
//CONSTRUINDO AS LISTAS ENCADEADAS 
PARA i = n - 1 até 0 (PASSO -1)
 +@A+73 B8+9 @6 +@+C+6 D3 0+A13 0+E3D3 3F6@13D3 F67 
 B[L[i] * n / (K + 1)] // DIVISÃO INTEIRA 
//ORDENANDO E CONCATENANDO AS LISTAS ENCADEADAS
j = 0 
PARA i = 0 até n - 1 
43PESQUISA E ORDENAÇÃO DE DADOS
 coloque a lista apontada por B[i] em ordem crescente 
 p = B[i] 
 !"#$%"&' ( ) "$*' 
 L[j] = p.info 
 p = p.proximo 
 j = j + 1 
 remova a lista apontada por B[i]
FIM {BUCKET SORT}
Algoritmo 2.14: Bucketsort
 !"#"$%&'%()*(+#,$%,#)*(-),*(!".)*(+)-%$(*%#(%/%01'"-)*(%$('%$+)(
 2&34(5)'%(61%()('"$"&7)(médio(-%(0"-"(!,*'"(%&0"-%"-"(*%#8(94(:%(;"')<(*%(
)*(%!%$%&')*(-%(=(%*',>%#%$(1&,;)#$%$%&'%(-,*'#,?1@-)*(&)(,&'%#>"!)(AB<(C3<(
D(+)**@>%!($)*'#"#(61%()('"$"&7)(esperado(-%(0"-"(!,*'"(%&0"-%"-"(*%#8(
0)&*'"&'%4(5%**%(0"*)<( ,&-%+%&-%&'%(-)($D')-)(1',!,E"-)<("()#-%&".F)(-%(
0"-"(!,*'"(%&0"-%"-"(*%#8(;%,'"(%$('%$+)(%*+%#"-)(0)&*'"&'%4(
G(0H+,"(-)*(%!%$%&')*(-%(1$"(!,*'"(%&0"-%"-"(#%61%#('%$+)("$)#',E"-
do constante. A remoção de uma lista encadeada também é feita em tempo 
"$)#',E"-)(0)&*'"&'%4( )&*%61%&'%$%&'%<()('%#0%,#)(!".)(,#8(#%61%#%#('%$-
+)(%*+%#"-)(0)&*'"&'%<(%("(0)$+!%/,-"-%('%$+)#"!(esperada do Algoritmo 
I10C%'*)#'(*%#8( 2&34
5)'%(61%(&)(*%J1&-)(!".)(+%#0)##%$)*("(!,*'"(-"(-,#%,'"(+"#"("(%*61%#-
-"4( )$(,**)<(")(0)&*'#1,#("*(!,*'"*(%&0"-%"-"*(+#%*%#>"$)*("()#-%$(#%!"',>"(
%/,*'%&'%(%&'#%()*(%!%$%&')*(#%+%',-)*4(K%()($D')-)(1',!,E"-)(+"#"()#-%&"#("*(
!,*'"*(%&0"-%"-"*(;)#(%*'8>%!<()(G!J)#,'$)(I10C%'*)#'('"$?D$(*%#8(%*'8>%!4(
L(?10C%'('%#8(&(+)*,.M%*4(G(61"&',-"-%(-%(&H*(&"*(!,*'"*(%&0"-%"-"*(
*%#8(&4( )&0!1@$)*(61%("(0)$+!%/,-"-%(%*+"0,"!(-)(I10C%'*)#'(+%#'%&0%("(
 2&34(N,&"!$%&'%<()?*%#>%(61%(I10C%'*)#'(&F)(,#8(#%61%#%#(0)$+"#".M%*(*%(
o método usado como subrotina não for baseado em comparações.
G(OJ1#"("(*%J1,#(%/%$+!,O0"("*( !,*'"*(%&0"-%"-"*(0)&*'#1@-"*(+%!)(
I10C%'*)#'("+H*(*1"()#-%&".F)4( !"#"$%&'%<("(0)&0"'%&".F)(-"*(!,*'"*(%&-
0"-%"-"*(+#)-1E("(!,*'"()#,J,&"!(%$()#-%$4
0 1 P Q R 5 6 7
=,*'"()#,J,&"! PS TQ 9P 5 9P R 71 RB
0 U R U 5
1 U 9P U 9P
P
I10C%'( (Q U PS
R U RB
5 U TQ
6
7 U 71
Figura 2.15: Ordenação com o Algoritmo Bucketsort
13. Radixsort
V**%($D')-)(+%#$,'%()#-%&"#(!,*'"*(01W)*(%!%$%&')*(*%W"$(-),*("(-),*(
0)$+"#8>%,*4(X$"(>%#*F)(-%**%($D')-)(;),(1',!,E"-"(%$(9SSY(+)#(Z%#$"&(
Z)!!%#,'7<(;1&-"-)#(-%(1$"(%$+#%*"(61%($",*('"#-%(-%1()#,J%$([(\I]4
44 PESQUISA E ORDENAÇÃO DE DADOS
V$(0"-"(,'%#".F)(-)(^"-,/*)#'<()#-%&"$)*("(!,*'"(+)#(1$"(-%(*1"*(
+)*,.M%*<(0)$%."&-)(+%!"(+)*,.F)($%&)*(*,J&,O0"&'%<("'D(07%J"#([(+)*,.F)(
$",*(*,J&,O0"&'%(2)*(%!%$%&')*(-"(!,*'"(-%>%$(61%(*%#(#%+#%*%&'"-)*(0)$("(
$%*$"(61"&',-"-%(-%(+)*,.M%*34( "-"()#-%&".F)('%$(61%(*%#(;%,'"(0)$(1$(
$D')-)(%*'8>%!4
ALGORITMO RADIX SORT 
 ENTRADA: UM VETOR L COM N POSIÇÕES CUJOS ELEMENTOS
 POSSUEM D SÍMBOLOS 
 SAÍDA: O VETOR L EM ORDEM CRESCENTE 
 
 PARA i = 1 até d 
 Coloque L em ordem crescente pelo i-ésimo símbolo menos 
 +,-.,/01.23 4+1.56 47 782656 53 6953.1:;6 3+2<=3>
FIM {RADIX SORT}
Algoritmo 2.15: Radixsort
_)-%$)*("-"+'"#()( )1&',&J*)#'(%(1',!,E8`!)(0)$)(*1?#)',&"(&)(^"-
-,/*)#'4(L?*%#>%(61%()*(%!%$%&')*(-"(!,*'"(*F)(0)&*','1@-)*(-%(*@$?)!)*(-%(
"!J1$("!;"?%')4(_)#(%/%$+!)<(*%("(!,*'"(0)&'D$(&a$%#)*(-%0,$",*<()("!;"?%')(
D(;)#$"-)(+%!)*(-@J,')*(-)(*,*'%$"(&1$D#,0)(-%0,$"!4(5)'%(61%()($",)#(*@$-
?)!)(%&0)&'#"-)(&1$"(+)*,.F)(-%(1$(%!%$%&')(&F)(%/0%-%()($",)#(*@$?)!)(
-)("!;"?%')4( )$)()('"$"&7)(-)("!;"?%')(D(0)&*'"&'%<(+)-%$)*(J"#"&',#(61%(
"(0)$+!%/,-"-%('%$+)#"!(%("(0)$+!%/,-"-%(%*+"0,"!(-%**"(>%#*F)(-)( )1&-
tingsort pertencem a 2&34
L1'#"(+)**,?,!,-"-%(*%#,"("-"+'"#()(I10C%'*)#'(%(1',!,E8`!)(0)$)(*1-
?#)',&"4(_"#"(,**)<()(?10C%'(-%>%#8('%#(1$"(+)*,.F)(+"#"(0"-"(%!%$%&')(-)(
"!;"?%')4(5F)(7">%#8(&%0%**,-"-%(-%()#-%&"#("*(!,*'"*(%&0"-%"-"*(>,*')(61%(
0"-"(1$"(-%!"*(0)&'D$("+%&"*(%!%$%&')*(0)$()($%*$)(*@$?)!)(&"(+)*,.F)(
61%(%*'8(*%&-)()#-%&"-"4(_)-%$)*(%&'F)(J"#"&',#(61%("(0)$+!%/,-"-%('%$-
+)#"!(-%**"(>%#*F)(-)(I10C%'*)#'(*%#8( 2&34(
5)'%(61%('"&')()( )1&',&J*)#'(61"&')()(I10C%'*)#'(*F)(%*'8>%,*4(X',-
!,E"&-)(61"!61%#(1$(-%!%*(0)$)(*1?#)',&"<()(^"-,/*)#'('%#8(0)$+!%/,-"-%(
temporal 2-&3(%(0)$+!%/,-"-%(%*+"0,"!( 2&34(K%(-(;)#(0)&*'"&'%("(0)$+!%-
/,-"-%('%$+)#"!(*%#8( 2&34(5)'%(61%()(^"-,/*)#'(D(&%0%**"#,"$%&'%(%*'8>%!<(
61"!61%#(61%(*%W"()($D')-)(1*"-)(0)$)(*1?#)',&"4
QP 500 500 b
500 RQ9 b QP
RQ9 QP RQ9 QP
PRS U QP U QP U RS
b
Ordenando 
pela 
unidade
cQ
Ordenando 
pela 
-%E%&"
QP
ordenando 
pela 
centena
cQ
QP PRS PRS PRS
cQ RS RS RQ9
RS b cQ 500
Figura 2.16: Ordenação com o Algoritmo Radixsort
45PESQUISA E ORDENAÇÃO DE DADOS
1. )$+!%'%("('"?%!"("?",/)4
Método
 )$+!%/,-"-%('%$+)#"! )$+!%/,-"-%(
espacial
d(%*'8>%!e
]%!7)#(0"*) Pior caso "*)($D-,)
I)!7" (nP3 (nP3 (nP3 O293 K,$
I)!7"(0)$(f("J
Inserção
K%!%.F)
K7%!!*)#'
Mergesort
Quicksort
Z%"+*)#'
2.( "#"0'%#,E%()(+,)#(%()($%!7)#(0"*)<(%$('%#$)*("**,&'H',0)*<(-%(0"-"(1$(
-)*($D')-)*(61%("+"#%0%$(&"('"?%!"("0,$"4
3.(])*'#%(0)$)(O(0"#,"("(!,*'"(29S<(PQ<(QY<(PP<(PT<(9c<(Q<(Q9<(T<(PS<(c<(QR<(b<(
RT3("+H*(0"-"(,'%#".F)(-)(!".)($",*(%/'%#&)(-)*("!J)#,'$)*(?)!7"<(,&*%#`
.F)<(*%!%.F)<(*7%!!*)#'(%(#"-,/*)#'<(-%*0#,')*(&%*'%(0"+@'1!)4
4.(])*'#%(0)$)(O(0"#,"("(!,*'"(29S<(PQ<(QY<(PP<(PT<(9c<(Q<(Q9<(T<(PS<(c<(QR<(b<(
RT3("+H*(*%#(+"#',0,)&"-"(+%!)(_#)0%-,$%&')(_"#',.F)("+#%*%&'"-)(&%*'%(
0"+@'1!)4
5.(:%&'#%()*($D')-)*(?)!7"<(?)!7"(0)$(f("J<( ,&*%#.F)<(*%!%.F)<(*7%!!*)#'<(
$%#J%*)#'(%(61,0C*)#'<(61",*((*%#,"$()*($",*(%O(0,%&'%*<(%$('%#$)*(-%(
'%$+)<(+"#"(0)!)0"#(!,*'"*(-"(;)#$"(2&<(9<(P<(Q<((444<(n(g(93(%$()#-%$(0#%*`
0%&'%e(h1*',O(61%(*1"(#%*+)*'"4
6.( V*0#%>"( 1$( "!J)#,'$)( 61%( ,$+!%$%&'%( )($D')-)( ?)!7"( +"#"( )#-%&"#(
!,*'"*( %&0"-%"-"*( 0)&'%&-)(&a$%#)*4( )&*,-%#%( 61%( 0"-"(&H( -"( !,*'"(
possui os campos info, anterior e proximo.
7.(\&-,61%(61",*(',+)*(-%(!,*'"*(+)-%$(*%#()#-%&"-"*(+%!)*($D')-)*( )1&`
',&J*)#'<(I10C%'*)#'(%(^ "-,/*)#'(%(61%(0)&-,.M%*(+#%0,*"$(*%#(*"',*;%,'"*(
+"#"( 61%( %!%*( '%&7"$( 0)$+!%/,-"-%( -%( '%$+)( !,&%"#( &)( '"$"&7)( -"(
lista.
8.( i)0j( -%*%W"( )#-%&"#( %$( '%$+)( !,&%"#( !,*'"*( -%(n elementos contendo 
&a$%#)*(,&'%,#)*(%&'#%(9(%(9Bn4(k1"!($D')-)(>)0j(1',!,E"#,"(e(h1*',O(61%(
sua resposta.
9.(])*'#%(0)$)(O(0"#,"()(>%')#( (&)(O(&"!(-%(0"-"(1$(-)*(0,&0)(!".)*(-)(
G!J)#,'$)( )1&',&J*)#'(")()#-%&"#("(!,*'"(29S<(PQ<(9Y<(PP<(PT<(9c<(Q<(99<(
T<(S<(c<(R<(b<(9T34
46 PESQUISA E ORDENAÇÃO DE DADOS
10.(])*'#%(0)$)(O0"#,"$("*(!,*'"*(%&0"-%"-"*(J%#"-"*(&)($D')-)(?10C%'(
*)#'(")()#-%&"#("(!,*'"(29S<(PQ<(9Y<(PP<(PT<(9c<(Q<(R9<(T<(S<(c<(QR<(b<(9T34
11.(G+H*(0"-"(,'%#".F)(-)(!".)($",*(%/'%#&)(-%(1$("!J)#,'$)(-%()#-%&".F)<(
"(!,*'"(2QSP<(9RP<(RYR<(PcY3(O0)1(0)$)($)*'#"-)("?",/)4(k1"!(;),()("!-
J)#,'$)(1',!,E"-)(2?)!7"<(,&*%#.F)<(*%!%.F)()1(#"-,/*)#'3e(h1*',O61%(+)#(
61%(&%&71$(-)*()1'#)*("!J)#,'$)*(%*'1-"-)*(&%*'%(0"+@'1!)(+)-%#,"('%#(
+#)-1E,-)("*(!,*'"*("?",/)4
29RP<(QSP<(RYR<(PcY3(
29RP<(PcY<(RYR<(QSP3(
29RP<(PcY<(QSP<(RYR3
 12.(V*0#%>"(1$(+#)0%-,$%&')(61%(#%0%?"(1$(7%"+(?,&8#,)(0#%*0%&'%(2+"*-
*"-)(+)#(#%;%#j&0,"3(%(1$"(+)*,.F)(i(%(%&'F)(#%$)>"()(%!%$%&')(61%(%*',-
ver na posição i(-)(7%"+4
13.(V*0#%>"(1$(+#)0%-,$%&')(61%('#"&*;)#$%(1$(>%')#(&1$(7%"+(?,&8#,)(
crescente em tempo linear.
14. ])*'#%(0)$)(O0"#,"(1$(7%"+(?,&8#,)(0#%*0%&'%(&)(61"!(;)#"$(,&*%#,-)*(
os valores 9S<(PQ<(9Y<(PP<(PT<(9c<(Q<(R9<(T<(S<(c<(QR<(b<(9T, nesta ordem (seu 
7%"+(-%>%(*%#(,$+!%$%&'"-)(&1$(>%')#(-%(9T(+)*,.M%*34(V$(*%J1,-"<(#%-
$)>"()(%!%$%&')(61%(%*',>%#(&"(+)*,.F)(Q<(-%+),*()(%!%$%&')(61%(%*',>%#(
&"(+)*,.F)(P(%(+)#(O$()(%!%$%&')(61%(%*',>%#(&"(+)*,.F)(9(%(%&'F)($)*'#%(
0)$)(O0"#,"()(7%"+4

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?