Ir para conteúdo

Ordenação por inserção?


mandelacruz

Posts Recomendados

Olá ,queria saber se esse codigo que criei seria a mesma coisa do algoritmo de ordenação por inserção. Tentei me expressar bem nos comentarios para que entendam.

Tentei criar esse algoritmo escrito de uma maneira diferente do que é apresentado nos livros e tal. Ele ta apresentando o resultado final tudo ok, mas fui ver a quantidade de trocas desse meu código com outro de um livro , vi que esse meu faz muito mais trocas dai me surgiu a duvida se realmente fiz ele certo.

#include <stdio.h>
#include <string.h>

void inserction(char *p, int caracs);

int main()
{
    char s[10];
    printf("Digite uma string:\n");
    scanf("%10[^\n]", s);
    printf("--------------------------------------------------------------\n");
    printf("String antes de ser ordenada por Inserction(InserctionSort)\n\t%s\n", s);
    inserction(s, strlen(s));
    printf("String depois de ser ordenada por Inserction(InserctionSort)\n\t%s\n", s);
    return 0;
}

void inserction(char *p, int caracs)
{
    for(int i=0; i<caracs-1; i++)// controlador da posição atual do vetor
    {
        for(int j=i+1; j<caracs; j++)// controlador da posição sucessora da atual posição
        {
            if(p[j] < p[i])// comparação da a posição atual com o seu sucessor. Caso V, declara uma
                           //variável temporária e faz as trocas
            {
                char t;
                t = p[i];
                p[i] = p[j];
                p[j] = t;
                if(i >= 1 && p[i] < p[i-1])//começo da comparação com o antecessor. Caso V, faz as trocas
                {
                    t = p[i-1];
                    p[i-1] = p[i];
                    p[i] = t;
                }
            }
        }
    }
}

Desde já obrigado!!

O código de livro que me referi foi esse aqui:

#include <stdio.h>
#include <string.h>

void insert(char *item, int count);

int main()
{
    char s[10];
    printf("Digite uma string:\n");
    scanf("%10[^\n]", s);
    printf("---------------------------------------------------\n");
    printf("String antes de ser ordenado por inserção: %s\n", s);
    insert(s, strlen(s));
    printf("\nString depois de ser ordenado por inserção: %s\n", s);
    return 0;
}

void insert(char *item, int count)
{
    int a, b;
    char t;
    for(a=1; a<count; ++a)
    {
        t = item[a];
        for(b=a-1; b>=0 && t<item[b]; b--)
        {
            item[b+1] = item[b];
        }
        item[b+1] = t;
    }
}

 

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...