introdução ordenação interna ordenação externa ordenar processo de rearranjar um conjunto de itens em uma ordem ascendente ou descendente visa facilitar a recuperação posterior de itens do conjunto ordenado os algoritmos de ordenação trabalham sobre os registros de um arquivo cada registro possui uma chave (que pode ser composta) utilizada para controlar a ordenação tipo ITEM = registro CHAVE: tipo_chave; {outros componentes} fim_registro; classificação dos métodos de ordenação interna o arquivo a ser ordenado cabe todo na memória principal (memória volátil) qualquer registro pode ser imediatamente acessado externa o arquivo a ser ordenado não cabe na memória principal os registros são acessados seqüencialmente ou em grandes blocos a maioria dos métodos de ordenação é baseada em comparações das chaves existem métodos de ordenação que utilizam o princípio da distribuição 1
exemplo de ordenação por distribuição considere o problema de ordenar um baralho com 52 cartas na ordem: ás < 2 < 3 < < 10 < valete < rainha < rei e < < < algoritmo 1. distribuir as cartas abertas em treze montes: ases, dois, três,..., reis 2. coletar os montes na ordem especificada 3. distribuir novamente as cartas abertas em quatro montes: paus, ouros, copas e espadas 4. coletar os montes na ordem especificada método também conhecido como ordenação digital, radixsort ou bucketsort problema de implementação é a demanda de memória extra ordenação interna ordenação por seleção (seleciona o menor elemento, depois o segundo menor e assim por diante) ordenação por inserção (o elemento é inserido de forma ordenada) shellsort (extensão da ordenação por inserção) quicksort (se escolhe um pivô, valor mediano, e a ordenação é feita em torno deste pivô) mergesort (ordenação do tipo divisão_e_conquista) heapsort (extensão da ordenação por seleção) ordenação parcial (consiste em obter os k primeiros elementos de um arranjo ordenado com n elementos) ordenação externa implementação por meio de seleção por substituição intercalação balanceada de vários caminhos (*) intercalação polifásica quicksort externo (*) será abordado neste curso 2
quando precisa-se classificar dados em ordem crescente ou decrescente, segundo algum critério, mas a quantidade de dados é muito grande, não há como carregá-los de uma só vez na memória principal, precisa usar um método de ordenação externa os algoritmos devem diminuir o número de acesso às unidades de memória externa os dados são armazenados como um arquivo seqüencial, apenas um registro pode ser acessado em um dado momento os métodos de ordenação interna são inadequados para ordenação externa o custo principal na ordenação externa é relacionado à transferência de dados entre memória interna e externa o desenvolvimento de métodos de ordenação externa é muito dependente do estado atual da tecnologia a variedade de tipos de memória externa torna os métodos dependentes de vários parâmetros apenas métodos gerais serão apresentados a maioria dos métodos de ordenação externa utiliza intercalação os dados são divididos em blocos, ordenados aos poucos, depois são intercalados, formando blocos maiores, até que todos estejam ordenados intercalar significa combinar dois ou mais blocos ordenados em um único bloco ordenado quebrar o arquivo em blocos do tamanho da memória interna disponível ordenar cada bloco na memória interna intercalar os blocos ordenados a cada passo de intercalação, são criados blocos ordenados cada vez maiores, até que todo o arquivo esteja ordenado os algoritmos de ordenação externa devem reduzir o número de passos de intercalação 3
objetivo: ordenar os 22 registros armazenados em um arquivo de entrada (fita) usando 4 arquivos auxiliares temporários (fita) e memória interna com capacidade para 3 registros (m) pode-se usar no máximo (m+1) arquivos temporários onde m é a capacidade de registros da memória interna I N T E R C A L A C A O B A L A N C E A D A os registros I N T... são lidos um após o outro 1a. fase: criação dos blocos ordenados ler os registros de m em m e ordenar estes registros escrevendo-os em um dos arquivos auxiliares fita 1: INT ACO ADE quebra em blocos de m registros fita 2: CER ABL A fita 3: AAL ACN 2a. Fase: intercalar os blocos ordenados 1) o primeiro registro de cada fita é lido 2) o registro contendo a menor chave é retirado de um dos arquivos auxiliares (de entrada) e colocado no arquivo auxiliar (de saída) 3) leia um novo registro do arquivo de onde foi retirado o último registro e compare novamente com os demais (2, no exemplo) dos outros arquivos 4) se o último registro (3o. no exemplo) de um dos blocos já foi lido, seu arquivo fica inativo até que o último registro dos outros arquivos também tenham sido lidos 5) ao encerrar o procedimento com os primeiros blocos dos arquivos de entrada, um bloco ordenado estará formado no arquivo temporário de saída 6) repita o processo para os blocos restantes dos arquivos 4
2a. fase: intercalação de 3 em blocos de até 9 registros primeira passada: fita 4: AACEILNRT AAABCCLNO AADE nova distribuição: fita 1: fita 2: fita 3: AACEILNRT AAABCCLNO AADE 3a. fase: intercalação de 9 em bloco de até 27 registros segunda passada: fita 4: AAAAAAABCCCDEEILLNNORT quantas passadas são necessárias para ordenar um arquivo de tamanho arbitrário? n é o número de registros do arquivo a memória interna tem capacidade para m registros a 1a. fase produz n/m blocos ordenados seja P(n) o número de passadas para a fase de intercalação seja a o número de arquivos auxiliares utilizados em cada passada o número máximo de arquivos auxiliares temporários é (m+1) assim, P(n) = log f (n/m) no exemplo anterior, n = 22, m = 3 e f = 3, portanto P(n) = log 3 (22/3) 2 foram usados a+1 arquivos auxiliares para um intercalação de a caminhos 5
Exercício 1) Quantas passadas são necessárias para ordenar o arquivo abaixo, considerando que a memória interna é capaz de armazenar 2 registros e o número de arquivos auxiliares temporários é 2? Mostre a configuração de cada fase (etapa) do processo de intercalação. MEMORIAINTERNA Exercício 2) Mostre a configuração de cada fase (etapa) do processo de intercalação para ordenar o arquivo abaixo, considerando que a memória interna é capaz de armazenar 4 registros e o número de arquivos auxiliares temporários é 3? OSDADOSSAODIVIDIDOSEMBLOCOS 6