SlideShare uma empresa Scribd logo
1 de 4
Baixar para ler offline
ALGORITMOS E ESTRUTURAS DE DADOS III
                                     Tutorial 6 (usa o compilador de linguagem C Dev-C++ versão 4.9.9.2)




Parte 3 de 3 sobre o algoritmo de ordenação quick (rápido) conhecido como Quicksort.
2 SITUAÇÕES ESPECIAIS
    1 INTRODUÇÃO
    Esta série de tutoriais sobre Algoritmos e          2.1 ORDENAÇÃO POR Í NDICES
    Estruturas de Dados III foi escrita usando o
                                                        Suponha-se que os objetos a ordenar são
    Microsoft Windows 7 Ultimate, Microsoft
                                                        strings (vetores de caracteres):
    Office 2010, Bloodshed Dev-C++ versão 4.9.9.2
    (pode ser baixado em http://www.bloodshed.net),        funções que operam sobre os dados precisam
    referências na internet e notas de aula do              ter em conta a questão da alocação de
    professor quando estudante. Ela cobre desde os          memória para strings
    algoritmos de ordenação, passando pela pesquisa        quem deve ser responsável pela gestão desta
    em memória primária e culminando com a                  memória?
    pesquisa em memória secundária.                        e se os objetos são "grandes"? Comparar e
                                                            mover os objetos pode ser dispendioso!
    Nós entendemos que você já conhece o
    compilador Dev-C++. No caso de você ainda não o     Imagine que cada objeto é o nome completo
    conhecer, dê uma olhada nos tutoriais Dev-C++       de um aluno (ou que é toda a sua informação:
    001 a 017, começando pelo Tutorial Dev-C++ -        nome, endereço, telefone etc.):
    001 - Introdução.
                                                           mesmo que haja uma boa abstração para
    Se não tem problemas com a linguagem C/C++ e
                                                            operar sobre os objetos ainda há a questão do
    o compilador Dev-C++, então o próximo passo é
                                                            custo operacional.
    saber ler, criar e alterar arquivos em disco
    usando linguagem C/C++. Se ainda não sabe           Por que movê-los?
    como fazê-lo, dê uma olhada nos tutoriais Dev-
    C++ 001 e 002, começando pelo Tutorial Dev-C++         porque não alterar apenas a referência para a
    001 – Criação, Leitura e Alteração de Arquivos.         sua posição relativa?

    Se sabe todas as coisas anteriores, então a         Solução 1:
    próxima etapa é conhecer os algoritmos mais
    básicos de ordenação. Em minhas notas de aula          dados numa tabela data[0], ..., data[N-1].
    você encontra um material básico, porém                usar uma segunda tabela, a[.], apenas de
    detalhado e com algoritmos resolvidos, dos              índices, inicializado de forma que a[i] = i, i =
    principais métodos de ordenação existentes.             0, ..., N-1.
                                                            O objetivo é rearranjar a tabela de índices de
    Adotaremos o livro Projeto de Algoritmos com            forma que a[0] aponte para o objeto com a
    Implementação em Pascal e C, Editora Cengage            primeira menor chave, a[1] aponte para o
    Learning, de Nivio Ziviani, como livro-texto da         objeto com a segunda menor chave, e assim
    disciplina. Nele você encontrará os métodos de          por diante.
    ordenação que iremos estudar.                          objetos      são   apenas    acessados     para
                                                            comparação
    Seu próximo passo será estudar os algoritmos de
    ordenação por Inserção, Seleção e Shellsort.        Rotinas de ordenação apenas acessam os dados
    Você pode usar os links anteriores (em inglês) ou   através de funções de interface. Assim, apenas
    fazer uso do livro-texto.                           estas têm de ser reescritas.

    Em seguida, você precisa conhecer o algoritmo       Suponha os seguintes dados:
    Quicksort. Para isto, você pode seguir o Tutorial                       data = [“rui”, “carlos”, “luis”]
    AED 004, desta série, e/ou ler o capítulo
    referente no livro-texto.                           Usamos uma tabela de índices:
                                                                                                a = [0, 1, 2]
    Se você estiver lendo este tutorial tenha certeza
    de ter seguido o Tutorial AED 005. Agora que           1º passo: comparar data[a[1]] com data[a[0]]:
    você seguiu todos os passos até aqui, está pronto                                      “carlos” < “rui”
    para prosseguir com este tutorial.                      pelo que há troca de a[1] com a[0]:
                                                                                                a = [1, 0, 2]




1
   2º passo: comparar data[a[2]] com data[a[1]]:        2.3.1 E SE FOR PRECISO RETORNAR                                OS
                                          “rui” < “luis”     DADOS ORDENADOS?
        pelo que há troca de a[2] com a[1]:
                                                                ordenar por índice/ponteiro
                                            a = [1, 2, 0]
                                                                fazer permutações in-situ (como?1)
       3º passo: comparar data[a[1]] com data[a[0]]:
                                       “carlos” < “luis”
        pelo que não há troca                                3 EXERCÍCIOS RESOLVIDOS
                                                             1. Considere a seguinte sequência de entrada:

                                                                   1        2        3     4       5        6    7      8         9    10
    Os valores ordenados são, portanto,                            26       34       9     0       4        89   6     15        27    44

                      data[a[0]], data[a[1]] e data[a[2]],       É solicitada a realização de uma classificação
                                                                 em ordem crescente sobre a sequência dada
    ou seja,
                                                                 usando o algoritmo de ordenação Quicksort.
                                 “carlos” < “luis” < “rui”       Mostre como cada passo é executado.

    (de forma camuflada usamos uma “espécie” de              2. Os exercícios de ordenação apresentados até
    Insertion sort).                                            agora solicitam o desenvolvimento de uma
                                                                ordenação que pode ser classificada como
    2.2 ORDENAÇÃO POR PONTEIROS                                 destrutiva, porque a tabela original é
                                                                destruída e substituída pela tabela ordenada.
    Outra solução é a tabela de índices conter de fato          Uma boa alternativa é criar uma tabela
    ponteiros para os dados. Sua forma é mais geral,            auxiliar cujos índices representam a posição
    pois os ponteiros podem apontar para qualquer               dos elementos na tabela a ser classificada.
    lado.                                                       Faça um programa em C/C++ que use a
                                                                tabela auxiliar e realize a classificação
    Itens não precisam ser membros de uma tabela,
                                                                Quicksort.
    nem de ter todos o mesmo tamanho.

                                                             3. Um vetor contém os elementos exibidos a
                                                                seguir. Mostre o conteúdo do vetor depois de
                                                                ter sido executada a primeira partição do
                                                                método Quicksort (faça isso para as três
                                                                formas simples de escolha do pivot: primeiro
                                                                elemento, último elemento e elemento
                                                                central).
                                                                  24    4        8   14   90   8       67   27   45   19    91    99   58


    Depois da ordenação, acesso sequencial à tabela
    de ponteiros devolve os elementos ordenados.
                                                             4 EXERCÍCIOS PROPOSTOS
    Um exemplo é a função qsort, do C, que                   1. Implemente um algoritmo de ordenação
    implementa o algoritmo Quicksort.                           Quicksort para ordenar a lista de 10000
                                                                inteiros, fornecida no meu blog, gravando a
    2.3 ORDENAÇÃO POR PONTEIROS OU                              lista ordenada em um arquivo de saída.
    ÍNDICES
    Não-intrusiva em relação aos dados, pois pode
    ser efetuada se os dados forem apenas de leitura.
    É possível efetuar ordenação em chaves
    múltiplas, por exemplo, listagens de alunos, com
    nome, número e nota. Evita o custo de
    mover/trocar os itens, que pode ser alto se estes
    itens representarem grandes quantidades de
    informação. É mais eficiente em problemas com
    dados grandes e chaves pequenas.                         1A série iniciada com o Tutorial AED 010 e finalizada com o
                                                             Tutorial AED 016, faz exatamente isso, trabalhando com
                                                             ordenação externa.


2
2. Crie um algoritmo Quicksort para ordenar o
       pequeno banco de dados abaixo, usando a
       chave {departamento, nome, idade}. Você
       pode conferir a ordenação usando uma
       planilha eletrônica. Dica: a função compare,
       do Tutorial AED 005, tópico 2.2.2 usa
       múltiplas chaves de comparação; dê uma
       olhada para se inspirar.

       Idade   Nome        Salario        Departamento
       40      Joao        100.43         Matriz
       42      Maria       200.32         Filial
       35      Amalia       50.54         Matriz
       30      Joao        150.73         Filial
       32      Mario       250.22         Matriz
       25      Amauri       60.14         Matriz

    3. Considere uma tabela que contém certa
       sequência de valores em uma ordem
       qualquer. Suponha que exista a possibilidade
       de alguns valores aparecerem repetidos. Faça
       um algoritmo que apague os valores não
       duplicados e desloque os valores repetidos em
       direção    ao    início    da   tabela.   Esse
       deslocamento não deve alterar a ordem
       original da tabela. Veja o exemplo a seguir:

       Tab = [3 8     3   10   5     9     8   10 15 34]
       N = 10

       Tab = [3 8     3   10   8     10    #   #   #   #]
       N=6


    5 TERMINAMOS
    Terminamos por aqui.

    Corra para o próximo tutorial.




3

Mais conteúdo relacionado

Mais procurados

Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
Leandro Lopes
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenação
Daiana de Ávila
 
Tutorial aed iii 003 - algoritmo de ordenação shellsort
Tutorial aed iii   003 - algoritmo de ordenação shellsortTutorial aed iii   003 - algoritmo de ordenação shellsort
Tutorial aed iii 003 - algoritmo de ordenação shellsort
Flávio Freitas
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
alfredtaddeus
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
Pedro Valente
 
Comparativo bubble sort e quick sort
Comparativo bubble sort e quick sortComparativo bubble sort e quick sort
Comparativo bubble sort e quick sort
Daiana de Ávila
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
Rogerio Oliveira
 

Mais procurados (18)

Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenação
 
Tutorial aed iii 003 - algoritmo de ordenação shellsort
Tutorial aed iii   003 - algoritmo de ordenação shellsortTutorial aed iii   003 - algoritmo de ordenação shellsort
Tutorial aed iii 003 - algoritmo de ordenação shellsort
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
Tutorial aed iii 001 - algoritmo de ordenação shellsort
Tutorial aed iii   001 - algoritmo de ordenação shellsortTutorial aed iii   001 - algoritmo de ordenação shellsort
Tutorial aed iii 001 - algoritmo de ordenação shellsort
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
 
Comparativo bubble sort e quick sort
Comparativo bubble sort e quick sortComparativo bubble sort e quick sort
Comparativo bubble sort e quick sort
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Ordenação
OrdenaçãoOrdenação
Ordenação
 
Trabalho de algoritmos
Trabalho de algoritmosTrabalho de algoritmos
Trabalho de algoritmos
 
Algoritmos de busca
Algoritmos de buscaAlgoritmos de busca
Algoritmos de busca
 
Tutorial aed iii 002 - algoritmo de ordenação shellsort
Tutorial aed iii   002 - algoritmo de ordenação shellsortTutorial aed iii   002 - algoritmo de ordenação shellsort
Tutorial aed iii 002 - algoritmo de ordenação shellsort
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmos
 
Tutorial Octave Matlab
Tutorial Octave MatlabTutorial Octave Matlab
Tutorial Octave Matlab
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
Introdução ao Octave
Introdução ao OctaveIntrodução ao Octave
Introdução ao Octave
 
Metodos de ordenação estrutura de dados
Metodos de ordenação   estrutura de dadosMetodos de ordenação   estrutura de dados
Metodos de ordenação estrutura de dados
 

Destaque

Tutorial aed iii 004 - algoritmo de ordenação quicksort
Tutorial aed iii   004 - algoritmo de ordenação quicksortTutorial aed iii   004 - algoritmo de ordenação quicksort
Tutorial aed iii 004 - algoritmo de ordenação quicksort
Flávio Freitas
 
Aprendendo a programar em arduino
Aprendendo a programar em arduinoAprendendo a programar em arduino
Aprendendo a programar em arduino
Chellton Almeida
 
Apostila Arduino.(Melhor Apostila)
Apostila Arduino.(Melhor Apostila)Apostila Arduino.(Melhor Apostila)
Apostila Arduino.(Melhor Apostila)
Chellton Almeida
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portugues
Laura
 

Destaque (20)

Tutorial aed iii 004 - algoritmo de ordenação quicksort
Tutorial aed iii   004 - algoritmo de ordenação quicksortTutorial aed iii   004 - algoritmo de ordenação quicksort
Tutorial aed iii 004 - algoritmo de ordenação quicksort
 
POO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de DesenvolvimentoPOO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de Desenvolvimento
 
Aprendendo a programar em arduino
Aprendendo a programar em arduinoAprendendo a programar em arduino
Aprendendo a programar em arduino
 
Guia arduino iniciante multilogica ARDUINO
Guia arduino iniciante multilogica ARDUINOGuia arduino iniciante multilogica ARDUINO
Guia arduino iniciante multilogica ARDUINO
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Python Orientação a Objeto
Python Orientação a ObjetoPython Orientação a Objeto
Python Orientação a Objeto
 
Apostila java completo
Apostila java completoApostila java completo
Apostila java completo
 
Cartilhado arduino ed1
Cartilhado arduino ed1Cartilhado arduino ed1
Cartilhado arduino ed1
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
PHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e Sessoes
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Aula 04 PHP - Utilizando Funções e Manipulando Arquivos
Aula 04 PHP - Utilizando Funções e Manipulando ArquivosAula 04 PHP - Utilizando Funções e Manipulando Arquivos
Aula 04 PHP - Utilizando Funções e Manipulando Arquivos
 
Apostila Arduino.(Melhor Apostila)
Apostila Arduino.(Melhor Apostila)Apostila Arduino.(Melhor Apostila)
Apostila Arduino.(Melhor Apostila)
 
Programação Estruturada e Orientada a Objetos
Programação Estruturada e Orientada a ObjetosProgramação Estruturada e Orientada a Objetos
Programação Estruturada e Orientada a Objetos
 
Aula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisAula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas Condicionais
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portugues
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Apostila LINUX Básico
Apostila LINUX BásicoApostila LINUX Básico
Apostila LINUX Básico
 
2672853-apostila-completa-de-Java
2672853-apostila-completa-de-Java2672853-apostila-completa-de-Java
2672853-apostila-completa-de-Java
 

Semelhante a Tutorial aed iii 006 - algoritmo de ordenação quicksort

Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7
PeslPinguim
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
gjpbg
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
Denis L Presciliano
 
SciLab -Tutorial
SciLab -TutorialSciLab -Tutorial
SciLab -Tutorial
blogmaxima
 
Java basico modulo_03
Java basico modulo_03Java basico modulo_03
Java basico modulo_03
wammendes
 
Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
Eduardo Carvalho
 
Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)
Helder da Rocha
 

Semelhante a Tutorial aed iii 006 - algoritmo de ordenação quicksort (20)

Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Aula 01
Aula 01Aula 01
Aula 01
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e Exercícios
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++
 
Aula1
Aula1Aula1
Aula1
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
 
Java 14
Java 14Java 14
Java 14
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
 
SciLab -Tutorial
SciLab -TutorialSciLab -Tutorial
SciLab -Tutorial
 
Aula 21
Aula 21Aula 21
Aula 21
 
Java basico modulo_03
Java basico modulo_03Java basico modulo_03
Java basico modulo_03
 
Python 04
Python 04Python 04
Python 04
 
Java13
Java13Java13
Java13
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
 
Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)
 
Aula 5
Aula 5 Aula 5
Aula 5
 
ODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração TopologiaODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração Topologia
 

Mais de Flávio Freitas

5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
Flávio Freitas
 
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
Flávio Freitas
 
Aula 001 plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...
Aula 001   plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...Aula 001   plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...
Aula 001 plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...
Flávio Freitas
 
Aula 003 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 003   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...Aula 003   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 003 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Flávio Freitas
 
Aula 004 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 004   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...Aula 004   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 004 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Flávio Freitas
 
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Flávio Freitas
 
Algoritmos para estruturas de dados
Algoritmos para estruturas de dadosAlgoritmos para estruturas de dados
Algoritmos para estruturas de dados
Flávio Freitas
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
Flávio Freitas
 

Mais de Flávio Freitas (15)

5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
 
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
 
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
Tutorial dev cpp   001 - criação, leitura e alteração de arquivosTutorial dev cpp   001 - criação, leitura e alteração de arquivos
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
 
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Tutorial dev cpp   002 - criação, leitura e alteração de arquivosTutorial dev cpp   002 - criação, leitura e alteração de arquivos
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
 
Aula 001 histórico dos computadores
Aula 001   histórico dos computadoresAula 001   histórico dos computadores
Aula 001 histórico dos computadores
 
Aula 004 noções de hardware
Aula 004   noções de hardwareAula 004   noções de hardware
Aula 004 noções de hardware
 
Aula 005 noções de hardware
Aula 005   noções de hardwareAula 005   noções de hardware
Aula 005 noções de hardware
 
Aula 001 plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...
Aula 001   plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...Aula 001   plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...
Aula 001 plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...
 
Aula 003 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 003   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...Aula 003   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 003 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
 
Aula 004 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 004   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...Aula 004   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 004 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
 
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
 
Algoritmos para estruturas de dados
Algoritmos para estruturas de dadosAlgoritmos para estruturas de dados
Algoritmos para estruturas de dados
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Matemática computacional aula 002
Matemática computacional   aula 002Matemática computacional   aula 002
Matemática computacional aula 002
 
Matemática computacional aula 001
Matemática computacional   aula 001Matemática computacional   aula 001
Matemática computacional aula 001
 

Último

A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
PatriciaCaetano18
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
sh5kpmr7w7
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 

Último (20)

Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptx
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Conflitos entre: ISRAEL E PALESTINA.pdf
Conflitos entre:  ISRAEL E PALESTINA.pdfConflitos entre:  ISRAEL E PALESTINA.pdf
Conflitos entre: ISRAEL E PALESTINA.pdf
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretação
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
 

Tutorial aed iii 006 - algoritmo de ordenação quicksort

  • 1. ALGORITMOS E ESTRUTURAS DE DADOS III Tutorial 6 (usa o compilador de linguagem C Dev-C++ versão 4.9.9.2) Parte 3 de 3 sobre o algoritmo de ordenação quick (rápido) conhecido como Quicksort.
  • 2. 2 SITUAÇÕES ESPECIAIS 1 INTRODUÇÃO Esta série de tutoriais sobre Algoritmos e 2.1 ORDENAÇÃO POR Í NDICES Estruturas de Dados III foi escrita usando o Suponha-se que os objetos a ordenar são Microsoft Windows 7 Ultimate, Microsoft strings (vetores de caracteres): Office 2010, Bloodshed Dev-C++ versão 4.9.9.2 (pode ser baixado em http://www.bloodshed.net),  funções que operam sobre os dados precisam referências na internet e notas de aula do ter em conta a questão da alocação de professor quando estudante. Ela cobre desde os memória para strings algoritmos de ordenação, passando pela pesquisa  quem deve ser responsável pela gestão desta em memória primária e culminando com a memória? pesquisa em memória secundária.  e se os objetos são "grandes"? Comparar e mover os objetos pode ser dispendioso! Nós entendemos que você já conhece o compilador Dev-C++. No caso de você ainda não o Imagine que cada objeto é o nome completo conhecer, dê uma olhada nos tutoriais Dev-C++ de um aluno (ou que é toda a sua informação: 001 a 017, começando pelo Tutorial Dev-C++ - nome, endereço, telefone etc.): 001 - Introdução.  mesmo que haja uma boa abstração para Se não tem problemas com a linguagem C/C++ e operar sobre os objetos ainda há a questão do o compilador Dev-C++, então o próximo passo é custo operacional. saber ler, criar e alterar arquivos em disco usando linguagem C/C++. Se ainda não sabe Por que movê-los? como fazê-lo, dê uma olhada nos tutoriais Dev- C++ 001 e 002, começando pelo Tutorial Dev-C++  porque não alterar apenas a referência para a 001 – Criação, Leitura e Alteração de Arquivos. sua posição relativa? Se sabe todas as coisas anteriores, então a Solução 1: próxima etapa é conhecer os algoritmos mais básicos de ordenação. Em minhas notas de aula  dados numa tabela data[0], ..., data[N-1]. você encontra um material básico, porém  usar uma segunda tabela, a[.], apenas de detalhado e com algoritmos resolvidos, dos índices, inicializado de forma que a[i] = i, i = principais métodos de ordenação existentes. 0, ..., N-1. O objetivo é rearranjar a tabela de índices de Adotaremos o livro Projeto de Algoritmos com forma que a[0] aponte para o objeto com a Implementação em Pascal e C, Editora Cengage primeira menor chave, a[1] aponte para o Learning, de Nivio Ziviani, como livro-texto da objeto com a segunda menor chave, e assim disciplina. Nele você encontrará os métodos de por diante. ordenação que iremos estudar.  objetos são apenas acessados para comparação Seu próximo passo será estudar os algoritmos de ordenação por Inserção, Seleção e Shellsort. Rotinas de ordenação apenas acessam os dados Você pode usar os links anteriores (em inglês) ou através de funções de interface. Assim, apenas fazer uso do livro-texto. estas têm de ser reescritas. Em seguida, você precisa conhecer o algoritmo Suponha os seguintes dados: Quicksort. Para isto, você pode seguir o Tutorial data = [“rui”, “carlos”, “luis”] AED 004, desta série, e/ou ler o capítulo referente no livro-texto. Usamos uma tabela de índices: a = [0, 1, 2] Se você estiver lendo este tutorial tenha certeza de ter seguido o Tutorial AED 005. Agora que  1º passo: comparar data[a[1]] com data[a[0]]: você seguiu todos os passos até aqui, está pronto “carlos” < “rui” para prosseguir com este tutorial. pelo que há troca de a[1] com a[0]: a = [1, 0, 2] 1
  • 3. 2º passo: comparar data[a[2]] com data[a[1]]: 2.3.1 E SE FOR PRECISO RETORNAR OS “rui” < “luis” DADOS ORDENADOS? pelo que há troca de a[2] com a[1]:  ordenar por índice/ponteiro a = [1, 2, 0]  fazer permutações in-situ (como?1)  3º passo: comparar data[a[1]] com data[a[0]]: “carlos” < “luis” pelo que não há troca 3 EXERCÍCIOS RESOLVIDOS 1. Considere a seguinte sequência de entrada: 1 2 3 4 5 6 7 8 9 10 Os valores ordenados são, portanto, 26 34 9 0 4 89 6 15 27 44 data[a[0]], data[a[1]] e data[a[2]], É solicitada a realização de uma classificação em ordem crescente sobre a sequência dada ou seja, usando o algoritmo de ordenação Quicksort. “carlos” < “luis” < “rui” Mostre como cada passo é executado. (de forma camuflada usamos uma “espécie” de 2. Os exercícios de ordenação apresentados até Insertion sort). agora solicitam o desenvolvimento de uma ordenação que pode ser classificada como 2.2 ORDENAÇÃO POR PONTEIROS destrutiva, porque a tabela original é destruída e substituída pela tabela ordenada. Outra solução é a tabela de índices conter de fato Uma boa alternativa é criar uma tabela ponteiros para os dados. Sua forma é mais geral, auxiliar cujos índices representam a posição pois os ponteiros podem apontar para qualquer dos elementos na tabela a ser classificada. lado. Faça um programa em C/C++ que use a tabela auxiliar e realize a classificação Itens não precisam ser membros de uma tabela, Quicksort. nem de ter todos o mesmo tamanho. 3. Um vetor contém os elementos exibidos a seguir. Mostre o conteúdo do vetor depois de ter sido executada a primeira partição do método Quicksort (faça isso para as três formas simples de escolha do pivot: primeiro elemento, último elemento e elemento central). 24 4 8 14 90 8 67 27 45 19 91 99 58 Depois da ordenação, acesso sequencial à tabela de ponteiros devolve os elementos ordenados. 4 EXERCÍCIOS PROPOSTOS Um exemplo é a função qsort, do C, que 1. Implemente um algoritmo de ordenação implementa o algoritmo Quicksort. Quicksort para ordenar a lista de 10000 inteiros, fornecida no meu blog, gravando a 2.3 ORDENAÇÃO POR PONTEIROS OU lista ordenada em um arquivo de saída. ÍNDICES Não-intrusiva em relação aos dados, pois pode ser efetuada se os dados forem apenas de leitura. É possível efetuar ordenação em chaves múltiplas, por exemplo, listagens de alunos, com nome, número e nota. Evita o custo de mover/trocar os itens, que pode ser alto se estes itens representarem grandes quantidades de informação. É mais eficiente em problemas com dados grandes e chaves pequenas. 1A série iniciada com o Tutorial AED 010 e finalizada com o Tutorial AED 016, faz exatamente isso, trabalhando com ordenação externa. 2
  • 4. 2. Crie um algoritmo Quicksort para ordenar o pequeno banco de dados abaixo, usando a chave {departamento, nome, idade}. Você pode conferir a ordenação usando uma planilha eletrônica. Dica: a função compare, do Tutorial AED 005, tópico 2.2.2 usa múltiplas chaves de comparação; dê uma olhada para se inspirar. Idade Nome Salario Departamento 40 Joao 100.43 Matriz 42 Maria 200.32 Filial 35 Amalia 50.54 Matriz 30 Joao 150.73 Filial 32 Mario 250.22 Matriz 25 Amauri 60.14 Matriz 3. Considere uma tabela que contém certa sequência de valores em uma ordem qualquer. Suponha que exista a possibilidade de alguns valores aparecerem repetidos. Faça um algoritmo que apague os valores não duplicados e desloque os valores repetidos em direção ao início da tabela. Esse deslocamento não deve alterar a ordem original da tabela. Veja o exemplo a seguir: Tab = [3 8 3 10 5 9 8 10 15 34] N = 10 Tab = [3 8 3 10 8 10 # # # #] N=6 5 TERMINAMOS Terminamos por aqui. Corra para o próximo tutorial. 3