Você está na página 1de 16

TÉCNICAS DE PROGRAMAÇÃO DE JOGOS

Prof. Tiago Machado


PROGRAMAÇÃO DE JOGOS

Algoritmos de Ordenação

BubleSort & Quicksort


PROGRAMAÇÃO DE JOGOS

BubleSort
PROGRAMAÇÃO DE JOGOS

O BubleSort é um algoritmo de
ordenação simples e bem
conhecido...
PROGRAMAÇÃO DE JOGOS

Algoritmo

1. Compare cada par de elementos adjacentes a partir do inicio


do array e, se eles estão em ordem inversa, mude suas
posições.

2. Se pelo menos uma troca foi feita, repita o passo 1.


PROGRAMAÇÃO DE JOGOS

Ordene as seguintes seqüências


de acordo com o BubleSort.

1, 2, 5, 4, -7, 8

5, -1, 10, 6, 3, 2
PROGRAMAÇÃO DE JOGOS

BubleSort Pseudocódigo

procedure bubbleSort( A : list of sortable items ) defined as:


do
swapped := false
for each i in 0 to length(A) - 2 inclusive do:
if A[i] > A[i+1] then
swap( A[i], A[i+1] )
swapped := true
end if
end for
while swapped
end procedure
PROGRAMAÇÃO DE JOGOS

QuickSort
PROGRAMAÇÃO DE JOGOS

O QuickSort é um algoritmo de ordenação


bem mais rápido e eficiente. O mesmo é
usado na prática e não apenas para
propósitos educacionais.
PROGRAMAÇÃO DE JOGOS

Algoritmo

1. Escolher um valor pivô. Para o pivô, pode ser escolhido qualquer valor,
entretanto a escolha do valor presente no meio do array facilita a
compreensão.

2.Partição. Rearranje os elementos da seguinte forma, todos os elementos


que são menores que o pivô ficam a esquerda do array e os elementos
maiores, ficam a direita. Valores iguais podem ficar em qualquer parte. Note
que o array pode ser dividido de forma não igualitária.

3.Ordenar ambas as partes. Aplique o quicksort recursivamente em


ambas as partes.
PROGRAMAÇÃO DE JOGOS
Estratégia

1. Após a escolha do pivô, faça uma troca da posição ocupada pelo mesmo,
com a posição do último valor na lista.

2. Declare dois inteiros, um que começa a percorrer a lista pela extremidade


esquerda e outro pela extremidade direita – 1.

3. Sempre que o inteiro da esquerda encontrar valores maiores ou iguais ao


pivô e o inteiro da direita encontrar valores menores ou iguais. Troque
(swap) ambas posições dos valores.

4. Quando o inteiro da esquerda for maior que o da direita, particione a


lista. Mas antes, faça uma troca do pivô com o elemento apontado pelo
inteiro da esquerda.

5. Repita, a partir do passo 1 os mesmos procedimentos para a parte


esquerda (e direita da partição) até que a lista tenha apenas um elemento.
PROGRAMAÇÃO DE JOGOS

Ordene as seguintes seqüências


de acordo com o QuickSort.

1, 2, 5, 4, -7, 8

5, -1, 10, 6, 8, 2
PROGRAMAÇÃO DE JOGOS

QuickSort (em Java)


int particao(int sequencia[], int esquerda, int direita)
{
int i = esquerda, j = direita;
int temp;
int pivo = sequencia[(esquerda + direita) / 2];

while (i <= j) {
while (sequencia[i] < pivo)
i++;
while (sequencia[j] > pivo)
j--;
if (i <= j) {
temp = sequencia[i];
sequencia[i] = sequencia[j];
sequencia[j] = temp;
i++;
j--;
}
}

return i;
}
PROGRAMAÇÃO DE JOGOS

QuickSort (em Java)

void quickSort(int sequencia[], int esquerda, int direita) {

int indice = particao(sequencia, esquerda, direita);


if (esquerda < indice - 1)
quickSort(sequencia, esquerda, indice - 1);
if (indice < direita)
quickSort(sequencia, indice, direita);

}
PROGRAMAÇÃO DE JOGOS

Exercício

Implemente o BubleSort e o QuickSort em C#

Pratiquem a execução dos dois algoritmos

Faremos uma prova sobre os mesmos em 15 dias

A entrega da implementação do BubleSort e do QuickSort fica


para o final da unidade na semana que antecede as provas.
PROGRAMAÇÃO DE JOGOS

Referências
Introduction to Algorithms, 2/e. Thomas H. Cormen, Dartmouth College Charles E.
Leiserson, Massachusetts Institute of Technology

Mark Allen Weiss, Data Structures & Algorithm Analysis In Java, Addison – Wesley.
1999.

en.wikipedia.org/wiki/Quicksort

http://en.wikipedia.org/wiki/Bubble_sort

http://www.algolist.net/

Você também pode gostar