Você está na página 1de 23

Algoritmos de Ordenacao & Pesquisa

AULA #3 (TEORICA)

DR. TICONGOLO, INACIO GASPAR

___________________________________________________________________ Maro de 2011

Recursividade
Recurso/Recursividade um mtodo de programao que no seu corpo chama a si mesmo.

A recurso utilizada quando na resolucao dum problema, aparece outro problema do mesmo tipo com o principal. Entao, dividimos o problema em subproblemas do mesmo tipo.
2

Recursividade (cont.)
A chamada de um mtodo para ele mesmo, igual a chamada de qualquer outro mtodo. Exemplo de mtodo recursivo que calcula o fatorial n!.

Recursividade (cont.)
Exemplo:

public int factorial (int x) { if (x= =0) return 1; return x*factorial(x-1); }


4

0. Recursividade
1. Algoritmos de Ordenacao >> BubbleSort >> SelectionSort >> InsertSort

2. Algoritmos de busca >>Pesquisa Sequencial >> Pesquisa Binaria

Bubble Sort
O bubble sort, ou ordenao por flutuao (literalmente "por bolha"), um algoritmo de ordenao dos mais simples. A ideia percorrer o vector diversas vezes, a cada passagem fazendo flutuar para o topo o maior elemento da sequncia. Essa movimentao lembra a forma como as bolhas em um tanque de gua procuram seu prprio nvel, e disso vem o nome do algoritmo.
6

Implementao (bubblesort)
public static void bubbleSort(int[]a) { for (int i = 0; i < a.length-1; i++) { for (int j = 0; j < a.length-1; j++) { if (a[j] > a[j+1]) { swap(a, j, j+1); } } } }
8

Selection sort
O selection sort (do ingls, ordenao por seleo) um algoritmo de ordenao baseado em se passar sempre o menor valor do vetor para a primeira posio (ou o maior dependendo da ordem requerida), depois o de segundo menor valor para a segunda posio, e assim feito sucessivamente com os (n-1) elementos restantes, at os ltimos dois elementos.
9

10

Implementao
public static void selectionSort(int[] a) { int index_min, aux; for (int i=0; i<a.length; i++) { index_min = i; for (int j=i+1; j<a.length; j++) { if (a[j]<a[index_min]) { index_min=j; } } if(index_min != i) { swap(a, index_min, i); } }}

11

private static void swap(int[] a, int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; }

12

Insertion Sort
Insertion sort, ou ordenao por insero, um

simples algoritmo de ordenao, eficiente quando aplicado a um pequeno nmero de elementos. Em termos gerais, ele percorre um vector de elementos da esquerda para a direita e medida que avana vai deixando os elementos mais esquerda ordenados.

13

14

Implementao
public static void insertionSort(int[] a) { for (int i = 0; i < a.length; i++) { int copyNumber = a[i]; int j = i; while (j > 0 && copyNumber < a[j-1]) { a[j] = a[j-1]; j--; } a[j] = copyNumber; } }
15

Pesquisas

Pesquisa Sequencial
public static int buscaSequencial(int a[], int valor) { for (int i=0; i< a.length; i++) { if(a[i]= =valor) return i; } return -1; }
17

Pesquisa Binria
A pesquisa ou busca binria (em ingls binary search algorithm ou binary chop) Pressupe que o array est ordenado e realiza sucessivas divises do espao de busca (diviso e conquista) comparando o elemento buscado (chave) com o elemento no meio do array. Se o elemento do meio do array for a chave, a busca termina com sucesso. Caso contrrio, se o elemento do meio vier antes do elemento buscado, ento a busca continua na metade posterior do array. E finalmente, se o elemento do meio vier depois da chave, a busca continua na metade anterior do array.
18

Normal
public static int buscaBinaria( int[] array, int valor ) { int esq = 0; int dir = array.length - 1; int valorMeio;

while ( esq <= dir ) { valorMeio = (esq + dir) / 2; if ( array[valorMeio] < valor ) { esq = valorMeio + 1; } else if( array[valorMeio] > valor ) { dir = valorMeio - 1; } else { return valorMeio; } } return -1;
}
19

Recursiva
public static int pesquisaBinaria(char a[],char dado,int inic, int fim) { int meio = (inic + fim)/2; if( a[meio] == dado ) return(meio); if (inic >= fim) return(1); if (dado < a[meio]) pesquisaBinaria (a,dado,inic,meio1); else pesquisaBinaria (a,dado,meio+1,fim); }
20

Exemplo:
Vamos imaginar um array de 7 elementos, sendo a[ 1,2,3,4,5,6,7], o dado a ser procurado 7, o ndice de incio 0 e o ndice final 6, ento ao entrar na funo:

21

22

O dado de ndice meio o dado procurado ento a funo retorna meio = 6 (o ndice do dado procurado).

23

Você também pode gostar