Você está na página 1de 20

ALGESD 2012 01a Ordenao e Busca

Prof. Dr. Marcelo Duduchi

Ordenao e Busca

As tarefas relacionadas ordenao e busca so muito utilizadas pelo ser humano; Muitas vezes a ordenao dos elementos facilita o processo de busca e a organizao geral dos elementos e por isso ele muito importante; Sempre que procuramos um nmero telefone na agenda do celular ou uma palavra no dicionrio estamos realizando a tarefa de busca;

Ordenao

So diversas as oportunidades onde necessitamos que os dados se apresentem numa determinada ordem; A apresentao dos dados em ordem facilita uma srie de tarefas e por isso importante estudarmos como realizar esta tarefa; Tal atividade nos permite conhecer melhor a manipulao de vetores e estudar a complexidade de algoritmos;

Ordenao

Os trs primeiros algoritmos apresentados sero:


Selection

Sort Insertion Sort Bubble Sort

Selection Sort
O mtodo Selection Sort ou ordenao por seleo tem este nome porque est baseado na seleo do menor valor do conjunto de elementos; A cada iterao o menor do conjunto de elementos encontrado e trocado com o primeiro elemento do conjunto;

Selection Sort
34 56 04 10 77 51 93 30 05 52 34 56 04 10 77 51 93 30 05 52 04 56 34 10 77 51 93 30 05 52 04 05 34 10 77 51 93 30 56 52 04 05 10 34 77 51 93 30 56 52 04 05 10 30 77 51 93 34 56 52 04 05 10 30 34 51 93 77 56 52 04 05 10 30 34 51 93 77 56 52 04 05 10 30 34 51 52 77 56 93 04 05 10 30 34 51 52 56 77 93 04 05 10 30 34 51 52 56 77 93

Selection Sort
public static void selectSort(int vet [ ]) { int menor; // indice do menor elemento // loop at o ltimo elemento for ( int i = 0; i < vet.length - 1; i++ ) { menor = i; // primeiro ndice do resto // encontra o ndice do menor elemento a partir de i for ( int j = i + 1; j < vet.length; j++ ) if ( vet [ j ] < vet [ menor ] ) menor = j; // troca i com o menor int aux = vet [ i ]; vet [ i ] = vet [menor]; vet [ menor ] = aux; } }

Selection Sort
public static void selectSort(int vet [ ]) { int menor; // indice do menor elemento // loop at o ltimo elemento for ( int i = 0; i < vet.length - 1; i++ ) { menor = i; // primeiro ndice do resto // encontra o ndice do menor elemento a partir de i for ( int j = i + 1; j < vet.length; j++ ) if ( vet [ j ] < vet [ menor ] ) menor = j; // troca i com o menor int aux = vet [ i ]; vet [ i ] = vet [menor]; vet [ menor ] = aux; } }

Selection Sort
public static void selectSort(int vet [ ]) { int menor; // indice do menor elemento // loop at o ltimo elemento for ( int i = 0; i < vet.length - 1; i++ ) { menor = i; // primeiro ndice do resto // encontra o ndice do menor elemento a partir de i for ( int j = i + 1; j < vet.length; j++ ) if ( vet [ j ] < vet [ menor ] ) menor = j; // troca i com o menor int aux = vet [ i ]; vet [ i ] = vet [menor]; vet [ menor ] = aux; } }

Bubble Sort
O mtodo Bubble Sort tambm chamado de ordenao por trocas consiste em comparar os pares consecutivos de elementos e troc-los de posio de acordo com a ordem proposta; A cada iterao o maior elemento fica na ltima posio do conjunto de elementos;

Bubble Sort
34 56 04 10 77 51 93 30 05 52 34 56 04 10 77 51 93 30 05 52 34 04 10 56 51 77 30 05 52 93 04 10 34 51 56 30 05 52 77 93 04 10 34 51 30 05 52 56 77 93 04 10 34 30 05 51 52 56 77 93 04 10 30 05 34 51 52 56 77 93 04 10 05 30 34 51 52 56 77 93 04 05 10 30 34 51 52 56 77 93 04 05 10 30 34 51 52 56 77 93 04 05 10 30 34 51 52 56 77 93

Bubble Sort
public static void bubbleSort( int vet [ ] ) { int aux; // varivel auxiliar para trocas // loop at o ltimo elemento for ( int i = 0; i < vet.length - 1; i++ ){ for ( int j = 0; j < vet.length-1 - i; j++ ){ // troca j com j+1 if (vet[ j ] > vet[ j+1]) { aux = vet [ j ]; vet [ j ] = vet [ j+1]; vet [ j+1] = aux; } } } }

Bubble Sort
public static void bubbleSort( int vet [ ] ) { int aux; // varivel auxiliar para trocas // loop at o ltimo elemento for ( int i = 0; i < vet.length - 1; i++ ){ for ( int j = 0; j < vet.length-1 - i; j++ ){ // troca j com j+1 if (vet[ j ] > vet[ j+1]) { aux = vet [ j ]; vet [ j ] = vet [ j+1]; vet [ j+1] = aux; } } } }

Bubble Sort
public static void bubbleSort( int vet [ ] ) { int aux; // varivel auxiliar para trocas // loop at o ltimo elemento for ( int i = 0; i < vet.length - 1; i++ ){ for ( int j = 0; j < vet.length-1 - i; j++ ){ // troca j com j+1 if (vet[ j ] > vet[ j+1]) { aux = vet [ j ]; vet [ j ] = vet [ j+1]; vet [ j+1] = aux; } } } }

Insertion Sort
O mtodo Insertion Sort ou ordenao por insero tem este nome por estar baseada na insero de cada um dos elementos no conjunto de elementos anteriores a ele segundo a ordem desejada; Esta forma de ordenar parece com o que fazemos ao organizar cartas de baralho;

Insertion Sort
34 56 04 10 77 51 93 30 05 52 34 56 04 10 77 51 93 30 05 52 34 56 04 10 77 51 93 30 05 52 04 34 56 10 77 51 93 30 05 52 04 10 34 56 77 51 93 30 05 52 04 10 34 56 77 51 93 30 05 52 04 10 34 51 56 77 93 30 05 52 04 10 34 51 56 77 93 30 05 52 04 10 30 34 51 56 77 93 05 52 04 05 10 30 34 51 56 77 93 52 04 05 10 30 34 51 52 56 77 93

Insertion Sort
public static void insertSort(int vet [ ] ) { int insert; // varivel temporria para o elemento a inserir // loop at o ltimo elemento for ( int i = 1; i < vet.length; i++ ) { // guarda o valor do elemento corrente insert = vet [ i ]; // inicializa a varivel de localizao int moveItem = i; // procura lugar para colocar o elemento while ( moveItem > 0 && vet [ moveItem - 1 ] > insert ) { // muda uma posio a direita vet [ moveItem ] = vet [ moveItem - 1 ]; moveItem--; } vet [ moveItem ] = insert; // coloca o elemento no lugar } }

Insertion Sort
public static void insertSort(int vet [ ] ) { int insert; // varivel temporria para o elemento a inserir // loop at o ltimo elemento for ( int i = 1; i < vet.length; i++ ) { // guarda o valor do elemento corrente insert = vet [ i ]; // inicializa a varivel de localizao int moveItem = i; // procura lugar para colocar o elemento while ( moveItem > 0 && vet [ moveItem - 1 ] > insert ) { // muda uma posio a direita vet [ moveItem ] = vet [ moveItem - 1 ]; moveItem--; } vet [ moveItem ] = insert; // coloca o elemento no lugar } }

Complexidade

Todos os algoritmos de ordenao vistos at agora esto baseados em dois loops, um dentro do outro, o que caracteriza O(n2);

Comparao de complexidade
Ordenao por seleo (select sort) O(n2)

Ordenao por insero (insertion sort) O(n2) Ordenao por trocas (bubble sort) O(n2)

Você também pode gostar