Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 a 10 de 12
  1. #1
    Hacker Avatar de FoXxD
    Data de Ingresso
    Jun 2006
    Posts
    1.154

    Post [Código] Métodos de ordenação simples.

    Código:
    void OrdenacaoBolha(char *v, int t)
    {
        register int i, j;
        register char chave;
    
        for (i = 0; i < t; i++)
            for(j = 1; j < t; j++)
                if(v[j-1] > v[j])
                {
                    chave  = v[j-1];
                    v[j-1] = v[j];
                    v[j]   = chave;
                }
    }
    Código:
    void OrdenacaoSelecao(char *v, int t)
    {
        register int i, j, min;
        register char chave;
    
        for(i=0; i < t; i++)
        {
            min = i;
            for (j = (i+1); j < t; j++)
                if(v[j] < v[min])
                    min = j;
    
            if (i != min)
            {
                chave  = v[i];
                v[i]   = v[min];
                v[min] = chave;
            }
    
        }
    }
    Código:
    void OrdenacaoSelecao2(char *v, int t)
    {
        register int i, j;
        register char chave;
    
        for (i = 0; i < t; i++)
            for(j = i+1; j < t; j++)
                if(v[i] > v[j])
                {
                    chave  = v[i];
                    v[i]   = v[j];
                    v[j] = chave;
                }
    }
    Código:
    void OrdenacaoInsercao(char *v, int t)
    {
        register int i, j;
        register char chave;
    
        for(i=1; i < t; i++)
        {
            chave = v[i];
            j=i-1;
    
            while ( j > (-1) && v[j] > chave)
            {
                v[j+1] = v[j];
                j=j-1;
            }
    
            v[j+1] = chave;
        }
    }

  2. #2
    Hehe esse primeiro que é o Bubble Sort ferrou muitas pessoas na minha faculdade numa prova de C .
    Mas é tão simples.
    MP Com dúvidas e pedidos de ajudas serão IGNORADAS
    "Mentes fracas não pensam,corpos fracos não lutam."

    Microsoft Technology Associate: Software Development Fundamentals (C#
    )

  3. #3
    Newbie
    Data de Ingresso
    May 2011
    Localização
    São Paulo
    Posts
    62
    Realmente, o bubble sort eh um dos poucos que eu ainda consigo lembrar legal, acredito q seja o mais facil ehehe..
    só complementando, no wikipedia tbm tem ótimos artigos de algoritmos de ordenaçao, com exemplo em diversas linguagens e etc:
    http://pt.wikipedia.org/wiki/Insertion_sort
    http://pt.wikipedia.org/wiki/Selection_sort
    http://pt.wikipedia.org/wiki/Comb_sort
    http://pt.wikipedia.org/wiki/Quick_sort
    http://pt.wikipedia.org/wiki/Merge_sort
    http://pt.wikipedia.org/wiki/Heapsort

    entre outros.. ^^

  4. #4
    Hacker Avatar de FoXxD
    Data de Ingresso
    Jun 2006
    Posts
    1.154

    Thumbs up

    É verdade Rodrigo, o método de ordenação Bolha e o mais simples, mas ferra muita gente uhsauhsa em muitos sentidos...

    Itachi valeu a contribuição, inclusive não conhecia o Comb Sort, o Merge Sort nem mesmo o Heap Sort.

    Tentei fazer o Insertion Sort de outra forma e saiu de uma forma até melhor =]

    Código:
    void Insercao2(char *v, int t)
    {
        register int j, i, x;
    
         for (i = 1; i < t; ++i)
            {
                x = v[i];
    
                for (j = (i-1); x < v[j] && j > -1; j--)
                    v[j+1] = v[j];
    
                v[j+1] = x;
            }
     }

  5. #5
    Para quem quer se aprofundar no assunto recomendo ler esse Livro.

    http://compare.buscape.com.br/estrut...534603480.html

    Bem barato as coisas no Brasil só 200R$ por um livro de 884 páginas.

  6. #6
    Hacker Avatar de FoXxD
    Data de Ingresso
    Jun 2006
    Posts
    1.154

    Cool

    nashleon, eu já dei uma olhada rápida nele e parece ser bom... Valeu a dica.
    Vou aproveitar e postar dois métodos avançados de ordenação.

    --> Shell Sort

    Código:
    void Shell(char *v, int t)
     {
        register int j, i, x, k, n;
        int g[5] = {9,5,3,2,1};
    
    
        for (k = 0; k < 5; k++)
        {
           n = g[k];
    
           for (i = n; i < t; ++i)
            {
                x = v[i];
    
                for (j = i-n; x < v[j] && j > -1; j = j-n)
                    v[j+n] = v[j];
    
                v[j+n] = x;
            }
        }
     }


    --> Quick Sort

    Código:
    void QuickSort(char *v, int ini, int fim)
    {
        int i, f;
        char p, aux;
    
        i = ini;
        f = fim;
        p = v[(ini+fim)/2];
    
        do{
            while(v[i] < p) i++;
            while(v[f] > p) f--;
    
            if (i <= f)
            {
                aux = v[i];
                v[i] = v[f];
                v[f] = aux;
                i++; f--;
            }
    
        }while (i < f);
    
        if (f > ini)  QuickSort(v, ini, f);
        if (i < fim)  QuickSort(v, i, fim);
    }

  7. #7
    Moderador Avatar de _Guga_
    Data de Ingresso
    Apr 2006
    Localização
    Salvador - BA
    Posts
    2.118
    olá amigo FoXxD, olha eu aqui pra incomodar denovo xD

    só um comentariozinho a respeito da palavra-chave q vc utilizou register

    register n altera a semântica de um programa C++ de jeito nenhum, pelo menos na maioria dos compiladora modernos.

    na maioria dos compiladores, register é exatamente tão significativo quanto espaço em branco rs xD
    tipo, a ideia por traz de register é q, se algumas variaveis forem intensamente utilizadas, faz sentido, sempre q possivel, coloca-las em registradores fisicos do processador, o q permite q elas operem mto mais rapidamente se for necessario busca-las na memoria cache ( relativamente ) lenta, ou pior ainda, na memoria principal. isso eh adequado ate certo ponto, mas n é suficiente pra o programador. quase nunca é recomendavel escrever register. hoje em diam a ideia de fz com q o programador "tempere" o codigo com dicas de alocação de registrador é, mais do q nunca, absurda, pois é praticamente impossivel até mesmo para o melhor programador ( VOCÊ XD ) apresentar a melhor alocação de registradores a fim de tornar a execução do seu codigo mais rapida. Mesmo se o programador souber o chip exato em q seu codigo executara ( o q é raro ) e souber tão bem quanto a equipe de desenvolvimento de geração de codigo do seu compilador ( o q é extremamente improvável ), o programador nunca poderá atribuir objetos a registradores da maneira eficaz como o compilador atribui, pq o programador n tem nenhuma ideia sobre quais outras transformações - por exemplo, inlining - já foram realizadas no momento em q o gerador de codigo vir o codigo e começar a decidir quais partes remanescentes serão mais beneficiadas da utilização do registrador. vc n conseguirá fazer um trabalho tao bom quanto o seu compilador e nem desejará, para esse tipo de coisa há ferramentas automatizadas, sem mencionar q sao mto melhores, ou seja, utilziar register pode ate atrapalhar o seu programa rs

    enfim, é só, desculpa se escrevi mto

    abraços


    I must not fear. Fear is the mind killer.

  8. #8
    Moderador Avatar de _Guga_
    Data de Ingresso
    Apr 2006
    Localização
    Salvador - BA
    Posts
    2.118
    edit: register n altera a semântica de um programa C ou C++ de jeito nenhum, pelo menos na maioria dos compiladora modernos.

    abraços


    I must not fear. Fear is the mind killer.

  9. #9
    Hacker Avatar de FoXxD
    Data de Ingresso
    Jun 2006
    Posts
    1.154

    Thumbs up

    _Guga_,

    Obrigado pela observação.
    Estarei observando isso nos próximos códigos.


  10. #10
    Vlw FoXX não programo em C/C++ mas me intereçei por estes algoritimo,e vou tentar me aprofundar mais neles na linguagem Pascal,muito obrigado.

Tags para este Tópico

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •