Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um...

40
MC-102 — Aula 15 Ordena¸c˜ ao – Selection Sort e Bubble Sort Eduardo C. Xavier Instituto de Computa¸c˜ ao – Unicamp 23 de Novembro de 2020

Transcript of Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um...

Page 1: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

MC-102 — Aula 15Ordenacao – Selection Sort e Bubble Sort

Eduardo C. Xavier

Instituto de Computacao – Unicamp

23 de Novembro de 2020

Page 2: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Roteiro

1 O problema da Ordenacao

2 Selection Sort

3 BubbleSort

4 Exercıcio

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 2 / 25

Page 3: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Ordenacao

Vamos estudar alguns algoritmos para o seguinte problema:

Dado uma colecao de elementos com uma relacao de ordem entre si,devemos gerar uma saıda com os elementos ordenados.

Nos nossos exemplos usaremos um vetor de inteiros para representartal colecao.

I E claro que quaisquer inteiros possuem uma relacao de ordem entre si.

Apesar de usarmos inteiros, os algoritmos servem para ordenarqualquer colecao de elementos que possam ser comparados.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 3 / 25

Page 4: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Ordenacao

O problema de ordenacao e um dos mais basicos em computacao.I Mas muito provavelmente e um dos problemas com o maior numero de

aplicacoes diretas ou indiretas (como parte da solucao para umproblema maior).

Exemplos de aplicacoes diretas:I Criacao de rankings, Definir preferencias em atendimentos por

prioridade, Criacao de Listas etc.

Exemplos de aplicacoes indiretas:I Otimizar sistemas de busca, manutencao de estruturas de bancos de

dados etc.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 4 / 25

Page 5: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection Sort

Seja vet um vetor contendo numeros inteiros.

Devemos deixar vet em ordem crescente.

A ideia do algoritmo e a seguinte:I Ache o menor elemento a partir da posicao 0. Troque entao este

elemento com o elemento da posicao 0.I Ache o menor elemento a partir da posicao 1. Troque entao este

elemento com o elemento da posicao 1.I Ache o menor elemento a partir da posicao 2. Troque entao este

elemento com o elemento da posicao 2.I E assim sucessivamente...

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 5 / 25

Page 6: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

Exemplo: (5,3,2,1,90,6).Iteracao 0. Acha menor: (5,3,2,1,90,6). Faz troca: (1,3,2,5,90,6).Iteracao 1. Acha menor: (1,3,2,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 2. Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 3. Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 5: Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,6,90).

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 6 / 25

Page 7: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

Exemplo: (5,3,2,1,90,6).Iteracao 0. Acha menor: (5,3,2,1,90,6). Faz troca: (1,3,2,5,90,6).Iteracao 1. Acha menor: (1,3,2,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 2. Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 3. Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 5: Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,6,90).

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 6 / 25

Page 8: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

Exemplo: (5,3,2,1,90,6).Iteracao 0. Acha menor: (5,3,2,1,90,6). Faz troca: (1,3,2,5,90,6).Iteracao 1. Acha menor: (1,3,2,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 2. Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 3. Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 5: Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,6,90).

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 6 / 25

Page 9: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

Exemplo: (5,3,2,1,90,6).Iteracao 0. Acha menor: (5,3,2,1,90,6). Faz troca: (1,3,2,5,90,6).Iteracao 1. Acha menor: (1,3,2,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 2. Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 3. Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 5: Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,6,90).

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 6 / 25

Page 10: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

Exemplo: (5,3,2,1,90,6).Iteracao 0. Acha menor: (5,3,2,1,90,6). Faz troca: (1,3,2,5,90,6).Iteracao 1. Acha menor: (1,3,2,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 2. Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 3. Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,90,6).Iteracao 5: Acha menor: (1,2,3,5,90,6). Faz troca: (1,2,3,5,6,90).

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 6 / 25

Page 11: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

Como achar o menor elemento a partir de uma posicao inicial?

Vamos achar o ındice do menor elemento em um vetor, a partir deuma posicao inicial ini:

menor = i n if o r j i n r a n g e ( i n i +1, l e n ( v ) ) :

i f v [ menor ] > v [ j ] :menor = j

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 7 / 25

Page 12: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

Como achar o menor elemento a partir de uma posicao inicial?

Vamos achar o ındice do menor elemento em um vetor, a partir deuma posicao inicial ini:

menor = i n if o r j i n r a n g e ( i n i +1, l e n ( v ) ) :

i f v [ menor ] > v [ j ] :menor = j

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 7 / 25

Page 13: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

Criamos entao uma funcao que retorna o ındice do elemento mınimode um vetor, a partir de uma posicao ini passada por parametro:

d e f ind menor ( v , i n i ) :menor = i n if o r j i n r a n g e ( i n i +1, l e n ( v ) ) :

i f v [ menor ] > v [ j ] :menor = j

r e t u r n menor

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 8 / 25

Page 14: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

Dada a funcao anterior para achar o ındice do menor elemento, comoimplementar o algoritmo de ordenacao?

Ache o menor elemento a partir da posicao 0, e troque com oelemento da posicao 0.

Ache o menor elemento a partir da posicao 1, e troque com oelemento da posicao 1.

Ache o menor elemento a partir da posicao 2, e troque com oelemento da posicao 2.

E assim sucessivamente...

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 9 / 25

Page 15: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

d e f s e l e c t i o n S o r t ( v ) :f o r i i n r a n g e ( l e n ( v ) ) :

menor = ind menor ( v , i ) #Acha pos . menor e l e . a p a r t i r de iaux = v [ i ]v [ i ] = v [ menor ] #Troca v [ menor ] com v [ i ]v [ menor ] = aux

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 10 / 25

Page 16: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Trocar o conteudo de 2 variaveis e muito comum.

a = 4b = 10

#t r o c a a com baux = aa = bb = aux

Em python existe uma forma sucinta de escrever esta troca:

a = 4b = 10

#t r o c a a com ba , b = b , a

Podemos usar esta forma sucinta nos nossos algoritmos de ordenacao.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 11 / 25

Page 17: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

Antes:

d e f s e l e c t i o n S o r t ( v ) :f o r i i n r a n g e ( l e n ( v ) ) :

menor = ind menor ( v , i ) #Acha pos . menor e l e . a p a r t i r de iaux = v [ i ]v [ i ] = v [ menor ] #Troca v [ menor ] com v [ i ]v [ menor ] = aux

Depois:

d e f s e l e c t i o n S o r t ( v ) :f o r i i n r a n g e ( l e n ( v ) ) :

menor = ind menor ( v , i ) #Acha pos . menor e l e . a p a r t i r de iv [ i ] , v [ menor ] = v [ menor ] , v [ i ] #Troca v [ menor ] com v [ i ]

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 12 / 25

Page 18: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-SortCom as funcoes anteriores implementadas podemos executar o exemplo:

i m p o r t random

d e f main ( ) :v = [ random . r a n d i n t ( 0 , 100) f o r i i n r a n g e ( 1 0 ) ]p r i n t ( v )s e l e c t i o n S o r t ( v ) #l i s t a e mut ave l por i s s o v s e r a ordenadap r i n t ( v )

d e f ind menor ( v , i n i ) :menor = i n if o r j i n r a n g e ( i n i +1, l e n ( v ) ) :

i f v [ menor ] > v [ j ] :menor = j

r e t u r n menor

d e f s e l e c t i o n S o r t ( v ) :f o r i i n r a n g e ( l e n ( v ) ) :

menor = ind menor ( v , i ) #Acha pos . menor e l e . a p a r t i r de iv [ i ] , v [ menor ] = v [ menor ] , v [ i ] #Troca v [ menor ] com v [ i ]

main ( )

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 13 / 25

Page 19: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

O uso da funcao para achar o ındice do menor elemento nao eestritamente necessaria.

Podemos refazer a funcao selectionSort como segue:

d e f s e l e c t i o n S o r t ( v ) :f o r i i n r a n g e ( l e n ( v ) ) :

#Acha pos . menor e l e . a p a r t i r de imenor = if o r j i n r a n g e ( i , l e n ( v ) ) :

i f v [ menor ] > v [ j ] :menor = j

v [ i ] , v [ menor ] = v [ menor ] , v [ i ] #Troca v [ menor ] com v [ i ]

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 14 / 25

Page 20: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

O uso da funcao para achar o ındice do menor elemento nao eestritamente necessaria.

Podemos refazer a funcao selectionSort como segue:

d e f s e l e c t i o n S o r t ( v ) :f o r i i n r a n g e ( l e n ( v ) ) :

#Acha pos . menor e l e . a p a r t i r de imenor = if o r j i n r a n g e ( i , l e n ( v ) ) :

i f v [ menor ] > v [ j ] :menor = j

v [ i ] , v [ menor ] = v [ menor ] , v [ i ] #Troca v [ menor ] com v [ i ]

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 14 / 25

Page 21: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Selection-Sort

Antes:

d e f s e l e c t i o n S o r t ( v ) :f o r i i n r a n g e ( l e n ( v ) ) :

menor = ind menor ( v , i ) #Acha pos . menor e l e . a p a r t i r de iv [ i ] , v [ menor ] = v [ menor ] , v [ i ] #Troca v [ menor ] com v [ i ]

Depois:

d e f s e l e c t i o n S o r t ( v ) :f o r i i n r a n g e ( l e n ( v ) ) :

#Acha pos . menor e l e . a p a r t i r de imenor = if o r j i n r a n g e ( i , l e n ( v ) ) :

i f v [ menor ] > v [ j ] :menor = j

v [ i ] , v [ menor ] = v [ menor ] , v [ i ] #Troca v [ menor ] com v [ i ]

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 15 / 25

Page 22: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Seja vet um vetor contendo n numeros inteiros.

Devemos deixar vet em ordem crescente.

O algoritmo faz algumas iteracoes repetindo o seguinte:I Compare vet[0] com vet[1] e troque-os se vet[0] > vet[1].I Compare vet[1] com vet[2] e troque-os se vet[1] > vet[2].I .....I Compare vet[n − 2] com vet[n − 1] e troque-os se

vet[n − 2] > vet[n − 1].

Apos uma iteracao repetindo estes passos o que podemos garantir???I O maior elemento estara na posicao correta!!!

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 16 / 25

Page 23: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Seja vet um vetor contendo n numeros inteiros.

Devemos deixar vet em ordem crescente.

O algoritmo faz algumas iteracoes repetindo o seguinte:I Compare vet[0] com vet[1] e troque-os se vet[0] > vet[1].I Compare vet[1] com vet[2] e troque-os se vet[1] > vet[2].I .....I Compare vet[n − 2] com vet[n − 1] e troque-os se

vet[n − 2] > vet[n − 1].

Apos uma iteracao repetindo estes passos o que podemos garantir???I O maior elemento estara na posicao correta!!!

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 16 / 25

Page 24: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Apos uma iteracao de trocas, o maior elemento estara na ultimaposicao.

Apos outra iteracao de trocas, o segundo maior elemento estara naposicao correta.

E assim sucessivamente.

Quantas iteracoes repetindo estas trocas precisamos para deixar ovetor ordenado?

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 17 / 25

Page 25: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Exemplo: (5,3,2,1,90,6).Valores sublinhados estao sendo comparados:(5, 3, 2, 1, 90, 6)(3, 5, 2, 1, 90, 6)(3, 2, 5, 1, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 6, 90)

Isto termina a primeira iteracao de trocas. Temos que repetir todo oprocesso mais 4 vezes!!!

Mas notem que nao precisamos mais avaliar a ultima posicao!

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 18 / 25

Page 26: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Exemplo: (5,3,2,1,90,6).Valores sublinhados estao sendo comparados:(5, 3, 2, 1, 90, 6)(3, 5, 2, 1, 90, 6)(3, 2, 5, 1, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 6, 90)

Isto termina a primeira iteracao de trocas. Temos que repetir todo oprocesso mais 4 vezes!!!

Mas notem que nao precisamos mais avaliar a ultima posicao!

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 18 / 25

Page 27: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Exemplo: (5,3,2,1,90,6).Valores sublinhados estao sendo comparados:(5, 3, 2, 1, 90, 6)(3, 5, 2, 1, 90, 6)(3, 2, 5, 1, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 6, 90)

Isto termina a primeira iteracao de trocas. Temos que repetir todo oprocesso mais 4 vezes!!!

Mas notem que nao precisamos mais avaliar a ultima posicao!

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 18 / 25

Page 28: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Exemplo: (5,3,2,1,90,6).Valores sublinhados estao sendo comparados:(5, 3, 2, 1, 90, 6)(3, 5, 2, 1, 90, 6)(3, 2, 5, 1, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 6, 90)

Isto termina a primeira iteracao de trocas. Temos que repetir todo oprocesso mais 4 vezes!!!

Mas notem que nao precisamos mais avaliar a ultima posicao!

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 18 / 25

Page 29: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Exemplo: (5,3,2,1,90,6).Valores sublinhados estao sendo comparados:(5, 3, 2, 1, 90, 6)(3, 5, 2, 1, 90, 6)(3, 2, 5, 1, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 6, 90)

Isto termina a primeira iteracao de trocas. Temos que repetir todo oprocesso mais 4 vezes!!!

Mas notem que nao precisamos mais avaliar a ultima posicao!

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 18 / 25

Page 30: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Exemplo: (5,3,2,1,90,6).Valores sublinhados estao sendo comparados:(5, 3, 2, 1, 90, 6)(3, 5, 2, 1, 90, 6)(3, 2, 5, 1, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 6, 90)

Isto termina a primeira iteracao de trocas. Temos que repetir todo oprocesso mais 4 vezes!!!

Mas notem que nao precisamos mais avaliar a ultima posicao!

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 18 / 25

Page 31: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Exemplo: (5,3,2,1,90,6).Valores sublinhados estao sendo comparados:(5, 3, 2, 1, 90, 6)(3, 5, 2, 1, 90, 6)(3, 2, 5, 1, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 6, 90)

Isto termina a primeira iteracao de trocas. Temos que repetir todo oprocesso mais 4 vezes!!!

Mas notem que nao precisamos mais avaliar a ultima posicao!

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 18 / 25

Page 32: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Exemplo: (5,3,2,1,90,6).Valores sublinhados estao sendo comparados:(5, 3, 2, 1, 90, 6)(3, 5, 2, 1, 90, 6)(3, 2, 5, 1, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 90, 6)(3, 2, 1, 5, 6, 90)

Isto termina a primeira iteracao de trocas. Temos que repetir todo oprocesso mais 4 vezes!!!

Mas notem que nao precisamos mais avaliar a ultima posicao!

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 18 / 25

Page 33: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

O codigo abaixo realiza as trocas de uma iteracao.

Sao comparados e trocados, os elementos das posicoes: 0 e 1; 1 e 2;. . .; i − 1 e i .

Assumimos que de (i + 1) ate (n − 1), o vetor ja tem os maioreselementos ordenados.

f o r j i n r a n g e ( 0 , i ) : #f a z t r o c a s a t e pos . i .i f v [ j ] > v [ j +1] :

v [ j ] , v [ j +1] = v [ j +1] , v [ j ]

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 19 / 25

Page 34: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

O codigo abaixo realiza as trocas de uma iteracao.

Sao comparados e trocados, os elementos das posicoes: 0 e 1; 1 e 2;. . .; i − 1 e i .

Assumimos que de (i + 1) ate (n − 1), o vetor ja tem os maioreselementos ordenados.

f o r j i n r a n g e ( 0 , i ) : #f a z t r o c a s a t e pos . i .i f v [ j ] > v [ j +1] :

v [ j ] , v [ j +1] = v [ j +1] , v [ j ]

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 19 / 25

Page 35: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

d e f b u b b l e S o r t ( v ) :f o r i i n r a n g e ( l e n ( v )−1 , 0 , −1): #i = n−1,n − 2 , . . . . , 1

#f a z t r o c a s a t e pos . if o r j i n r a n g e ( 0 , i ) : #j = 0 , 1 , . . . , i −1.

i f v [ j ] > v [ j +1] :v [ j ] , v [ j +1] = v [ j +1] , v [ j ]

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 20 / 25

Page 36: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Note que as trocas na primeira iteracao ocorrem ate a ultima posicao.

Na segunda iteracao ocorrem ate a penultima posicao.

E assim sucessivamente.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 21 / 25

Page 37: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

i m p o r t random

d e f main ( ) :v = [ random . r a n d i n t ( 0 , 100) f o r i i n r a n g e ( 1 0 ) ]p r i n t ( v )b u b b l e S o r t ( v )p r i n t ( v )

d e f b u b b l e S o r t ( v ) :f o r i i n r a n g e ( l e n ( v )−1 , 0 , −1): #i = n−1,n − 2 , . . . . , 1

#f a z t r o c a s a t e pos . if o r j i n r a n g e ( 0 , i ) : #j = 0 , 1 , . . . , i −1.

i f v [ j ] > v [ j +1] :v [ j ] , v [ j +1] = v [ j +1] , v [ j ]

main ( )

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 22 / 25

Page 38: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Bubble-Sort

Python ja possui um algoritmo de ordenacao implementado nometodo sort de listas:

>>> l = [ 8 6 , 31 , 23 , 71 , 58 , 64 , 78 , 51 , 25 , 3 8 ]>>> l . s o r t ( )>>> l[ 2 3 , 25 , 31 , 38 , 51 , 58 , 64 , 71 , 78 , 8 6 ]

Entao por que estamos aprendendo estes algoritmos de ordenacao?

O foco do curso e a criacao de algoritmos, e nao aprender tudo sobreuma linguagem de programacao (Python neste caso).

Entender como funcionam algoritmos basicos de ordenacao efundamental para exercıcio da logica de programacao e criacao dealgoritmos.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 23 / 25

Page 39: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Exercıcio

Altere os algoritmos vistos nesta aula para que estes ordenem um vetor deinteiros em ordem decrescente ao inves de ordem crescente.

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 24 / 25

Page 40: Instituto de Computa˘c~ao { Unicampeduardo/2020_S2_mc102/aula19.pdfO problema de ordena˘c~ao e um dos mais b asicos em computac~ao. I Mas muito provavelmente e um dos problemas com

Exercıcio

No algoritmo SelectionSort, o laco principal pode ser executado de i=0 atei = len(v) − 2 e nao i = len(v) − 1. Por que?

d e f s e l e c t i o n S o r t ( v ) :f o r i i n r a n g e ( l e n ( v )−1): #nao p r e c i s a s e r r a n g e ( l e n ( v ) ) . Por que ?

#Acha pos . menor e l e . a p a r t i r de imenor = if o r j i n r a n g e ( i +1, l e n ( v ) ) :

i f v [ menor ] > v [ j ] :menor = j

v [ i ] , v [ menor ] = v [ menor ] , v [ i ]

Eduardo C. Xavier (Instituto de Computacao – Unicamp) MC-102 — Aula 19 23 de Novembro de 2020 25 / 25