Você está na página 1de 12

ECT2303 - Linguagems de Programação

Algoritmos de Ordenação

Diego R. C. Silva

13 de Setembro de 2017

ECT2303 - Algoritmos de Ordenação 1 13 de Setembro de 2017 1 / 12


Motivação

Muitas vezes precisamos ordenar os elementos de um vetor:


I Lista de frequência.
I Palavras no dicionário.
I Maiores notas em um concurso.

Pergunta
Como ordenar eficientemente um vetor ?

ECT2303 - Algoritmos de Ordenação 2 13 de Setembro de 2017 2 / 12


Definições

Ordenação
Dado um vetor v de dados, colocar os elementos de v em uma certa
ordem (crescente / decrescente).

Nesta aula:
Bolha (Bubble sort)
Ordenação por seleção (Selection sort)
Ordenação por inserção (Insertion sort)
Quick Sort.

ECT2303 - Algoritmos de Ordenação 3 13 de Setembro de 2017 3 / 12


Bubble Sort

Em cada iteração o maior elemento


“flutua” até a última posição.

https://www.youtube.com/
watch?v=lyZQPjUT5B4

ECT2303 - Algoritmos de Ordenação 4 13 de Setembro de 2017 4 / 12


Bubble Sort
void bubble ( int v [] , int n ) {
int i , j ;
for ( i =n -1; i >=1; i - -) {
for ( j =0; j < i ; j ++) {
if ( v [ j ] > v [ j +1])
swap (v ,j , j +1) ;
}
print (v , TAM ) ;
}
}

[96 92 0 24 32 52 33 72 35 67 ]
[92 0 24 32 52 33 72 35 67 96 ]
[0 24 32 52 33 72 35 67 92 96 ]
[0 24 32 33 52 35 67 72 92 96 ] Se o vetor já está ordenado,
[0 24 32 33 35 52 67 72 92 96 ]
[0 24 32 33 35 52 67 72 92 96 ]
precisamos continuar percorrendo
[0 24 32 33 35 52 67 72 92 96 ] os elementos ?
[0 24 32 33 35 52 67 72 92 96 ]
[0 24 32 33 35 52 67 72 92 96 ]
[0 24 32 33 35 52 67 72 92 96 ]
ECT2303 - Algoritmos de Ordenação 5 13 de Setembro de 2017 5 / 12
Selection Sort

Em cada iteração passamos o menor


elemento para a primeira posição.

https:
//www.youtube.com/watch?v=
Ns4TPTC8whw&nohtml5=False

ECT2303 - Algoritmos de Ordenação 6 13 de Setembro de 2017 6 / 12


Selection Sort
void selection ( int v [] , int n ) {
int i , j , min ;
for ( i =0; i <n -1; i ++) {
min = i ;
for ( j = i +1; j < n ; j ++) {
if ( v [ j ] < v [ min ])
min = j ;
}
swap (v ,i , min ) ; print (v , TAM ) ;
}
}
[6 72 90 43 78 60 78 39 5 72 ]
[5 72 90 43 78 60 78 39 6 72 ]
[5 6 90 43 78 60 78 39 72 72 ]
[5 6 39 43 78 60 78 90 72 72 ]
[5 6 39 43 78 60 78 90 72 72 ]
[5 6 39 43 60 78 78 90 72 72 ]
[5 6 39 43 60 72 78 90 78 72 ]
[5 6 39 43 60 72 72 90 78 78 ]
[5 6 39 43 60 72 72 78 90 78 ]
[5 6 39 43 60 72 72 78 78 90 ]
ECT2303 - Algoritmos de Ordenação 7 13 de Setembro de 2017 7 / 12
Insertion Sort

En cada iteração vai deixando os elementos mais à esquerda


ordenados
(https://www.youtube.com/watch?v=ROalU379l3U&nohtml5=False)

ECT2303 - Algoritmos de Ordenação 8 13 de Setembro de 2017 8 / 12


Insertion Sort
void insertion ( int v [] , int n ) {
int i , j , min ;
for ( i =1; i < n ; i ++) {
for ( j = i ;j >0; j - -) {
if ( v [ j ] < v [j -1])
swap (v ,j ,j -1) ;
else break ;
}
print (v , TAM ) ;
}
}
[14 13 82 69 50 3 62 73 66 34 ]
[13 14 82 69 50 3 62 73 66 34 ]
[13 14 82 69 50 3 62 73 66 34 ]
[13 14 69 82 50 3 62 73 66 34 ]
[13 14 50 69 82 3 62 73 66 34 ]
[3 13 14 50 69 82 62 73 66 34 ]
[3 13 14 50 62 69 82 73 66 34 ]
[3 13 14 50 62 69 73 82 66 34 ]
[3 13 14 50 62 66 69 73 82 34 ]
[3 13 14 34 50 62 66 69 73 82 ]
ECT2303 - Algoritmos de Ordenação 9 13 de Setembro de 2017 9 / 12
Quick Sort
Escolher o pivô;
Partição: rearranjar
os elementos para
que todos os
elementos à direita
do pivô sejam
maiores que ele.
Recursão: Ordenar
recursivamente os
2 subvetores.

https:
//www.youtube.
com/watch?v=
ywWBy6J5gz8&
nohtml5=False
ECT2303 - Algoritmos de Ordenação 10 13 de Setembro de 2017 10 / 12
Quick Sort

void quickSort ( int v [] , int left , int right ) {


int index = partition (v , left , right ) ;
print (v , TAM ) ;
if ( left < index - 1)
quickSort (v , left , index - 1) ;
if ( index < right )
quickSort (v , index , right ) ;
}

[935 769 866 348 382 283 701 629 357 289 ]
[289 357 283 348 382 866 701 629 769 935 ]
[283 357 289 348 382 866 701 629 769 935 ]
[283 289 357 348 382 866 701 629 769 935 ]
[283 289 348 357 382 866 701 629 769 935 ]
[283 289 348 357 382 866 701 629 769 935 ]
[283 289 348 357 382 629 701 866 769 935 ]
[283 289 348 357 382 629 701 769 866 935 ]

ECT2303 - Algoritmos de Ordenação 11 13 de Setembro de 2017 11 / 12


Bolha vs Quick Sort

https://www.youtube.com/watch?v=aXXWXz5rF64

ECT2303 - Algoritmos de Ordenação 12 13 de Setembro de 2017 12 / 12

Você também pode gostar