Algoritmos de Ordenação
Prof. Frederico Brito Fernandes
[email protected]
CONTEÚDO
(1) Auto-avaliação
(2) InsertionSort
(3) SelectionSort
(1) Auto-avaliação
Ordenação/Classificação
• Antes de prosseguir:
– Transforme o algoritmo bubbleSortRecursivo da aula passada, de modo
que ele continue sendo recursivo, mas que não use nenhuma estrutura
de repetição, como por exemplo for, while, ou qualquer outra.
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
2
(2) InsertionSort
Ordenação por Inserção (Insertion Sort)
• Baseado na técnica usada por jogadores de cartas
– Quando um jogador pega uma nova carta, ele abre espaço para a nova
carta e então insere-a no seu lugar apropriado
– O jogador mantém em ordem as cartas já pegas
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
3
(2) InsertionSort
Ordenação por Inserção (Insertion Sort)
7 4 1
9 2
7 7 1
9 2
4 7 1
9 2
i=1
1 4 7
9 2
1 4 7
9 9
4 7 1
9 2
1 4 7
7 9
4 7 7
9 2
1 4 4
7 9
4 4 7
9 2
1 2 4
7 9
1 4 7
9 2
1 4 7
9 2
Estrutura, Pesquisa e Ordenação de Dados
i=2
i=4
i=3
Frederico Brito Fernandes
4
(2) InsertionSort
Pseudocódigo
Algorithm Insertion_Sort (A, N):
Input: An array A storing N items
Output: A sorted in ascending order
for i  1 to N-1 do {
current  A[i]
j  i
while (A[j-1] > current) And (j>0)
A[j]  A[j-1]
j  j-1
A[j]  current
}
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
O(n2)
5
(2) InsertionSort
Código em C
#include <stdio.h>
void insertionSort(int n, int v[]){
int i, j, elemento;
for (i=0; i<n;i++){
elemento=v[i];
j=i-1;
while (j>=0 && elemento<v[j]){
v[j+1]=v[j];
j--;
}
v[j+1] = elemento;
}
void imprimeVetor(int n, int v[]){
int i;
for (i=0;i<n;i++) printf(" %3d",v[i]);
}
main(){
int qtde = 5;
int vetor[10] = {2,6,1,3,7,5,4,9,10,8};
imprimeVetor(qtde, vetor);
insertionSort(qtde, vetor);
printf("\n");
imprimeVetor(qtde, vetor);
getchar();
}
}
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
6
(3) SelectionSort
Ordenação por Seleção (Selection Sort)
• Encontre o menor elemento no array e troque-o com o
elemento na primeira posição.
• Encontre o segundo menor elemento no array e troque-o
com o elemento na segunda posição, e assim por diante
até que o array todo esteja ordenado.
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
7
(3) SelectionSort
Pseudocódigo
Algorithm Selection_Sort (A, N):
Input: An array A storing N items
Output: A sorted in ascending order
for i  0 to N-2 do
min  i
for j  i+1 to N-1 do
if A[j] < A[min] then
min  j
temp  A[min]
A[min]  A[i]
A[i]  temp
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
O(n2)
8
(3) SelectionSort
Código em C
void selectionSort(int n, int v[]){
int i;
for (i=0;i<n;i++){
troca(i,encontraIndiceDoMenor(i,n-1,v),
v);
}
}
#include <stdio.h>
void troca(int i, int j, int v[]){
int aux= v[i];
v[i]=v[j];
v[j]=aux;
}
int encontraIndiceDoMenor(int inicio, int fim,
int v[]){
int i, indiceDoMenor=inicio;
for (i=inicio; i<=fim;i++){
if (v[i]<v[indiceDoMenor])
indiceDoMenor=i;
}
return indiceDoMenor;
}
Estrutura, Pesquisa e Ordenação de Dados
main(){
int qtde = 5;
int vetor[10] = {2,6,1,3,7,5,4,9,10,8};
imprimeVetor(qtde, vetor);
selectionSort(qtde, vetor);
printf("\n");
imprimeVetor(qtde, vetor);
getchar();
}
Frederico Brito Fernandes
9
Download

Aula 20 - Frederico Brito Fernandes