Escolar Documentos
Profissional Documentos
Cultura Documentos
Quick
Sort
A
idia
do
quicksort
tem
como
base
dois
princpios,
assim
como
o
mergesort:
Recurso
Abordagem
dividir
para
conquistar
1. Dividir o problema em sub-problemas (menores) 2. Resolver estas novas instncias (recursivamente) 3. Juntar as solues parciais para achar a soluo do problema principal.
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
Quick
Sort
O
Quiksort
um
algoritmo
de
ordenamento
que
no
pior
caso
(n2)
Contudo,
na
pr-ca,
geralmente
a
melhor
opo!
Devido
a
sua
alta
ecincia
no
caso
mdio:
(nlgn)
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
Combinar:
Os
arranjos
so
ordenados
localmente!
No
h
trabalho
para
combin-lo:
O
arranjo
A [p..r]
est
inteiramente
ordenado!
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
Quick
Sort
Em
cada
iterao
escolha
uma
posio
do
subarranjo
(piv):
ap
A
idia
bsica
organizar
os
elementos
do
subarranjo
de
forma
que:
Todos
os
elementos
a
esquerda
de
ak
so
menores
ou
iguais
a
ap
Todos
os
elementos
a
direita
de
ak
so
maiores
que
ap
Onde
k
a
posio
correta
do
piv
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
Quicksort Pseudo-Cdigo
v3
v3
lef
v1
v1
lef
v5
v5
lef
v2 v2
v7 v7
v8 v8
v6 v6
v4
v4
1.
Escolhe
o
piv
2.1
Anda
com
lef
v3
v1
v5
v2
right
v7
v8
v6
right
v4
2.2
Anda
com
right
right right
v3
v1
v2
right
v5
lef
v7
v8
v6
v4
v3
v1
v2
v5
v7
v8
v6
v4
right right
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
Con2nua
ParYcionamento
v3
v1
v5
v2
v7
v8
v6
v4
v3
v1
v2
v4
v7
v8
v6
v5
Agora
que
o
piv
est
na
posio
correta
devemos
chamar
recursivamente
o
sort
para
o
arranjo
da
esquerda
e
em
seguida
para
o
arranjo
da
direita
Algoritmos
e
Estrutura
de
Dados
Algoritmo
de
Ordenao:
Quick
Sort
2011
Vinicius
Cardoso
Garcia
10
v3 v3
v1 v1
v2 v2
v4 v4 . . .
v7 v7
v8 v8
v6 v6
v5 v5
v1 v1
v2 v2
v3 v3
v4 v4 . . .
v7 v7
v8 v8
v6 v6
v5 v5
v1
v2
v3
v4
v5
v6
v7
v8
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
11
60 60 60 60 60 60
80 110 120 40 80 110 120 40 80 110 120 40 80 110 120 40 10 110 120 40 10
10 10 10
30 30 30
50 50 90
70 70 70 70 70 70
10 100 90 80 100 90
12
50 50 10
30 30 30
20 20 20
60 60 60
10 10 50
40 40 40
lef >= right ento troca(lef,pivo) 10 10 10 30 30 30 20 20 20 40 40 40 50 50 50 60 60 60 70 110 80 100 90 120 70 110 80 100 90 120 70 110 80 100 90 120
lef
>=
right
ento
troca(lef,pivo)
10
20
30
40
50
60
70
110
80
100
90
120
Algoritmos
e
Estrutura
de
Dados
Algoritmo
de
Ordenao:
Quick
Sort
2011
Vinicius
Cardoso
Garcia
13
10 10 10 10
20 20 20 20
30 30 30 30
40 40 40 40
50 50 50 50
60 60 60 60
70 110 80 100 90 120 70 110 80 100 90 120 70 110 80 100 90 120 70 110 80 100 90 120
lef
>=
right
ento
troca(lef,pivo)
10
10
20
20
30
30
40
40
50
50
60
60
70
110
80
100
90
120
70
110
80
100
90
120
Algoritmos
e
Estrutura
de
Dados
Algoritmo
de
Ordenao:
Quick
Sort
2011
Vinicius
Cardoso
Garcia
14
10 10
20 20
30 30
40 40
50 50
60 60
lef >= right ento troca(lef,pivo) 10 10 10 20 20 20 30 30 30 40 40 40 50 50 50 60 60 60 70 110 80 100 90 120 70 110 80 100 90 120 70 80 110 100 90 120
Algoritmos e Estrutura de Dados 80 90 100 110 120 Ordenao 2011 Vinicius Cardoso Garcia
15
10 10
20 20
30 30
40 40
50 50
60 60
70 70
80 80
lef >= right ento troca(lef,pivo) 10 10 20 20 30 30 40 40 50 50 60 60 70 70 80 80 90 100 110 120 90 100 110 120
Ordenado!
Algoritmos
e
Estrutura
de
Dados
Ordenao
2011
Vinicius
Cardoso
Garcia
16
ParYcionamento
do
Arranjo
O
Procedimento
PARTITION
organiza
o
subarranjo
A [p..r]
localmente
int
par-ciona(int[]
a,
int
lef,
int
right,
int
pivo)
{
int
posPivo
=
right--;
while(true)
{
while
(a[lef]<pivo)
lef++;
while
(right>=0
&&
a[right]>pivo)
right--;
if
(lef>=right)
break;
else
swap(a,
lef,
right);
}
swap(a,
lef,
posPivo);
return
lef;
}
Algoritmos
e
Estrutura
de
Dados
Algoritmo
de
Ordenao:
Quick
Sort
2011
Vinicius
Cardoso
Garcia
17
Analisando
o
Pseudo-Cdigo
Loop
invariante:
possvel
enunciar
um
loop
invariante
entre
as
linhas
3
e
6
do
pseudo-cdigo
Propriedades:
Se
p
k
i,
ento
A[k]
x
Se
I
+
1
k
j
-
1,
ento
A[k]
>
x
Se
k
=
r,
ento
A[k]
=
x
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
18
Analisando
o
Pseudo-Cdigo
Inicializao:
Antes
da
primeira
iterao
i=p-1
j=p
A
atribuio
na
linha
1
A
terceira
propriedade
saYsfeita!
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
19
Analisando
o
Pseudo-Cdigo
Manuteno
Existem
dois
casos
a
considerar,
dependendo
do
teste
da
linha
4:
Se
A[j]>x
A
nica
ao
do
loop
incrementar
j
(as
propriedades
conYnuam
vlidas)
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
20
Analisando
o
Pseudo-Cdigo
Manuteno
Existem
dois
casos
a
considerar,
dependendo
do
teste
da
linha
4:
Se
A[j]
x
A[i]
e
A[j]
so
permutados
e
ento
j
incrementado
Assim,
ca:
A[i]
x
(propriedade
1
saYsfeita)
A[j-1]
>
x
(propriedade
2
saYsfeita)
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
21
Analisando
o
Pseudo-Cdigo
Trmino:
j=r
Toda
a
entrada
no
arranjo
pose
ser
classicada
em
um
dos
trs
conjuntos
denidos
pelo
loop
invariante
Um
conjunto
com
todos
os
elementos
menores
que
x
Um
conjunto
com
todos
os
elementos
maiores
que
x
Um
conjunto
unitrio
contende
x
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
22
Desempenho do Quiksort
" "
Desempenho do Quiksort
O par-cionamento tem custo (n) ! O particionamento tem custo (n) Par-cionamento no pior caso ! Particionamento no pior caso
So produzidos d subproblemas: um um n-1 So produzidos dois ois subproblemas: com com n-1 elementos e com zero elementos. elementos e umum com zero elementos. Gera-se a recurso: Gera-se a recurso:
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
23
Desempenho do Quiksort
n/2
!
Desempenho
do
Quiksort
Par-cionamento
do
melhor
caso:
Sendo
um
n/2
e
o
outro
n/2
-
1
Particionamento do melhor scaso: So
produzidos
dois
ubproblemas
no
maiores
" So produzidos dois subproblemas no maiores que que
n/2
"
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
24
Desempenho do Quiksort
No
caso
mdio,
o
algoritmo
quicksort
se
Particionamento balanceado Caso mdioaproxima
muito
mais
o algoritmo quicksort ue
do
pior
c " No caso mdio, do
melhor
caso
do
qse aproxima aso!
muito mais doqmelhor ar-cionamente
pior caso! roduza
Suponha
ue
o
p caso do que do sempre
p " Suponhadiviso
proporcional
dsempre produza uma uma
que o particionamente e
9
para
1:
diviso proporcional de 9 para 1:
25
Desempenho do Quiksort
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
26
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
27
QuickSort
O
quicksort
mais
eciente
do
que
o
mergesort
na
maior
parte
dos
casos.
No
entanto,
para
uma
seqncia
inversamente
ordenada
o
quicksort
demora
muito
mais
que
o
mergesort.
Esse
o
pior
caso,
portanto,
a
complexidade
do
quicksort
O(n2)!
O
quicksort
popular
pois
uma
seqncia
inversamente
ordenada
di|cil
de
ocorrer.
Portanto,
na
maioria
das
vezes
seria
melhor
usar
o
quicksort.
Algoritmos
e
Estrutura
de
Dados
Algoritmo
de
Ordenao:
Quick
Sort
2011
Vinicius
Cardoso
Garcia
28
AYvidades
complementares
Implemente
o
Quicksort
em
Python
Ambas
as
verses
(normal
e
aleatria)
Algoritmos e Estrutura de Dados Algoritmo de Ordenao: Quick Sort 2011 Vinicius Cardoso Garcia
29