Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduo Programao II
Lio 6
Algoritmos de Ordenao
JEDITM
Autor Rebecca Ong Equipe Joyce Avestro Florence Balagtas Rommel Feria Rebecca Ong John Paul Petines Sun Microsystems Sun Philippines
Sistemas Operacionais Suportados NetBeans IDE 5.5 para os seguintes sistemas operacionais: Microsoft Windows XP Profissional SP2 ou superior Mac OS X 10.4.5 ou superior Red Hat Fedora Core 3 Solaris 10 Operating System (SPARC e x86/x64 Platform Edition) NetBeans Enterprise Pack, poder ser executado nas seguintes plataformas: Microsoft Windows 2000 Profissional SP4 Solaris 8 OS (SPARC e x86/x64 Platform Edition) e Solaris 9 OS (SPARC e x86/x64 Platform Edition) Vrias outras distribuies Linux Configurao Mnima de Hardware Nota: IDE NetBeans com resoluo de tela em 1024x768 pixel Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 500 MHz Intel Pentium III workstation ou equivalente 500 MHz Intel Pentium III workstation ou equivalente UltraSPARC II 450 MHz AMD Opteron 100 Srie 1.8 GHz PowerPC G4 Memria 512 MB 512 MB 512 MB 512 MB 512 MB HD Livre 850 MB 450 MB 450 MB 450 MB 450 MB
Configurao Recomendada de Hardware Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 1.4 GHz Intel Pentium III workstation ou equivalente 1.4 GHz Intel Pentium III workstation ou equivalente UltraSPARC IIIi 1 GHz AMD Opteron 100 Series 1.8 GHz PowerPC G5 Memria 1 GB 1 GB 1 GB 1 GB 1 GB HD Livre 1 GB 850 MB 850 MB 850 MB 850 MB
Requerimentos de Software NetBeans Enterprise Pack 5.5 executando sobre Java 2 Platform Standard Edition Development Kit 5.0 ou superior (JDK 5.0, verso 1.5.0_01 ou superior), contemplando a Java Runtime Environment, ferramentas de desenvolvimento para compilar, depurar, e executar aplicaes escritas em linguagem Java. Sun Java System Application Server Platform Edition 9. Para Solaris, Windows, e Linux, os arquivos da JDK podem ser obtidos para sua plataforma em http://java.sun.com/j2se/1.5.0/download.html Para Mac OS X, Java 2 Plataform Standard Edition (J2SE) 5.0 Release 4, pode ser obtida diretamente da Apple's Developer Connection, no endereo: http://developer.apple.com/java ( necessrio registrar o download da JDK). Para mais informaes: http://www.netbeans.org/community/releases/55/relnotes.html
Introduo Programao II
JEDITM
Auxiliadores especiais
Reviso Geral do texto para os seguintes Pases:
Brasil Tiago Flach Guin Bissau Alfredo C, Bunene Sisse e Buon Olossato Quebi ONG Asas de Socorro
Coordenao do DFJUG
Daniel deOliveira JUGLeader responsvel pelos acordos de parcerias Luci Campos - Idealizadora do DFJUG responsvel pelo apoio social Fernando Anselmo - Coordenador responsvel pelo processo de traduo e reviso, disponibilizao dos materiais e insero de novos mdulos Regina Mariani - Coordenadora responsvel pela parte jurdica Rodrigo Nunes - Coordenador responsvel pela parte multimdia Srgio Gomes Veloso - Coordenador responsvel pelo ambiente JEDITM (Moodle)
Agradecimento Especial
John Paul Petines Criador da Iniciativa JEDITM Rommel Feria Criador da Iniciativa JEDITM
Introduo Programao II
JEDITM
1. Objetivos
Ordenao tem a tarefa de organizar elementos em uma ordem particular, e isto implementado em uma variedade de aplicaes. Considerando uma aplicao bancria, a qual exibe a lista de contas de clientes ativos, por exemplo. A maioria dos usurios deste sistema provavelmente preferem ter a lista em uma ordem crescente, por convenincia. Nesta lio veremos vrios algoritmos de ordenao foram inventados porque essa tarefa fundamental e freqentemente utilizada. Por estas razes, examinar os algoritmos existentes ser muito benfico. Ao final desta lio, o estudante ser capaz de: Explicar os algoritmos utilizados em ordenao por insero, ordenao por seleo, Merge Sort e Quick Sort Implementar seu prprio algoritmo utilizando essas tcnicas
Introduo Programao II
JEDITM
2.1. O algoritmo
public void insertionSort(Object array[], int startIdx, int endIdx) { for (int i = startIdx; i < endIdx; i++) { int k = i; for (int j = i + 1; j < endIdx; j++) { if (((Comparable) array[k]).compareTo(array[j])>0) { k = j; } } swap(array[i], array[k]); } }
2.2. Um exemplo
Dados Manga Ma Pssego Laranja Banana 1 passo Manga Ma Pssego Laranja Banana 2 passo Ma Manga Pssego Laranja Banana 3 passo Laranja Ma Manga Pssego Banana 4 passo Banana Laranja Ma Manga Pssego
Introduo Programao II
JEDITM
3.1. O algoritmo
public void selectionSort(Object array[], int startIdx, int endIdx) { int min; for (int i = startIdx; i < endIdx; i++) { min = i; for (int j = i + 1; j < endIdx; j++) { if (((Comparable) array[min]).compareTo(array[j])>0) { min = j; } } swap(array[min], array[i]); } }
3.2. Um exemplo
Dados Maricar Vanessa Margaux Hannah Rowena 1 passo Hannah Vanessa Margaux Maricar Rowena 2 passo Hannah Margaux Vanessa Maricar Rowena 3 passo Hannah Margaux Maricar Vanessa Rowena 4 passo Hannah Margaux Maricar Rowena Vanessa
Introduo Programao II
JEDITM
4. Merge Sort
Antes de examinar o algoritmo Merge Sort, vamos primeiramente dar uma rpida olhada no paradigma do dividir-e-conquistar para que melhor se compreenda o Merge Sort.
4.3. O algoritmo
void mergeSort(Object array[], int startIdx, int endIdx) { if (array.length != 1) { mergeSort(leftArr, startIdx, midIdx); mergeSort(rightArr, midIdx+1, endIdx); combine(leftArr, rightArr); } }
Introduo Programao II 7
JEDITM
4.4. Um exemplo
Dados:
7 2 5 6
Dividir o array de dados em dois: ArrayEsq ArrayDir
7 2
5 6
7
Combinar
2 7
Dividir ArrDir em dois: ArrayEsq ArrayDir
5
Combinar
5 6
Combinar ArrayEsq e ArrayDir.
2 5 6 7
Figura 3: Exemplo de Merge sort
Introduo Programao II
JEDITM
5. Quick Sort
Quick Sort foi criado por C.A.R. Hoare. Como o Merge Sort, este algoritmo baseado no paradigma do dividir-e-conquistar. Mas ao invs de possuir as trs fases, ele envolve apenas as seguintes fases: 1.Dividir Separao dos arrays em dois subarrays A[p...q-1] e A[q+1...r] onde cada elemento em A[p...q-1] menor ou igual a A[q] e cada elemento em A[q+1...r] maior ou igual a A[q]. A[q] chamado de eixo. Clculo de q parte do processo de separao. 2.Conquistar Ordenar os subarrays pela recursividade, chamado de mtodo quickSort. No existe a fase de "Combinar" pois os subarrays so ordenados localmente.
5.1. O algoritmo
void quickSort(Object array[], int leftIdx, int rightIdx) { int pivotIdx; if (rightIdx > leftIdx) { pivotIdx = partition(array, leftIdx, rightIdx); quickSort(array, leftIdx, pivotIdx-1); quickSort(array, pivotIdx+1, rightIdx); } }
5.2. Um exemplo
Array dado: 3 1 4 1 5 9 2 6 5 3 5 8
Inicializar a esquerda com o ponteiro no segundo elemento, e a direita com o ponteiro no ltimo elemento. Esq. 3 1 4 1 5 9 2 6 5 3 5 Dir. 8
Mover o ponteiro da esquerda na direo da direita at ser localizado um valor maior do que o do eixo. Mover o ponteiro direito na direo esquerda at ser localizado um valor menor do que o eixo. Esq. Dir. 3 1 4 1 5 9 2 6 5 3 5 8
Introduo Programao II
JEDITM
Esq. 3 1 3 1 5 9 2 6 5
Dir. 4 5 8
Observe que os ponteiros da esquerda e direita se cruzaram e o direito < esquerdo. Neste caso, trocar o eixo pelo valor do ponteiro direito. piv 2 1 3 1 3 9 5 6 5 4 5 8
A caminhada do eixo agora est completa. Ordenao de arrays por recursividade em cada lado, utilizando o eixo.
Introduo Programao II
10
JEDITM
Instituto CTS Patrocinador do DFJUG. Sun Microsystems Fornecimento de servidor de dados para o armazenamento dos vdeo-aulas. Java Research and Development Center da Universidade das Filipinas Criador da Iniciativa JEDITM. DFJUG Detentor dos direitos do JEDITM nos pases de lngua portuguesa. Banco do Brasil Disponibilizao de seus telecentros para abrigar e difundir a Iniciativa JEDITM. Politec Suporte e apoio financeiro e logstico a todo o processo. Borland Apoio internacional para que possamos alcanar os outros pases de lngua portuguesa. Instituto Gaudium/CNBB Fornecimento da sua infra-estrutura de hardware de seus servidores para que os milhares de alunos possam acessar o material do curso simultaneamente.
Introduo Programao II
11