Giter Site home page Giter Site logo

buscasequencialfuncionarios's Introduction

Busca de strings com Busca Sequencial:

A Busca Sequencial é um método simples de procurar por uma determinada string em uma coleção, como um vetor ou uma lista, em linguagens de programação como C. Ela envolve percorrer cada elemento da coleção, um por um, até encontrar a string desejada ou até percorrer todos os elementos.

Exemplo de uma função com busca sequencial

Funcionario *buscaLinearnome ( int count_fun , Funcionario * funcionario[], char * nome )
{

    int i;

    for (i = 0; i < count_fun; i++)
    {
        if (strcasecmp(funcionario[i]->nome, nome) == 0)
        {
            return funcionario[i];
        }
    }
    return NULL;
} 

Neste exemplo, temos uma estrutura Funcionario que contém um campo nome. A função buscaLinearnome recebe o número total de funcionários (count_fun), um vetor de ponteiros para funcionários (funcionario[ ]) e o nome a ser procurado. Ela percorre cada funcionário no vetor e compara os nomes usando strcmp. Se um nome correspondente for encontrado, a função retorna o ponteiro para esse funcionário. Se não for encontrado, a função retorna NULL.

Vantagens da busca sequencial:

  • Simplicidade
  • Flexibilidade
  • Implementação em estruturas simples

Desvantagens da busca sequencial:

  • Ineficiência para grandes conjuntos de dados
  • Baixa performance
  • Menor eficiência em cenários específicos

Complexidade da busca de strings com busca sequencial

A complexidade de tempo de um algoritmo é denotada por T(n), em que n é o tamanho da entrada. A complexidade de tempo de um algoritmo é a quantidade de tempo que o algoritmo leva para executar uma tarefa com uma entrada de tamanho n.

Exemplo de complexidade de tempo:

Funcionario *buscaLinearnome ( int count_fun , Funcionario * funcionario[], char * nome )
{

    int i;// c1, 1 vez

    for (i = 0; i < count_fun; i++)// c2, n-1 vezes
    {
        if (strcasecmp(funcionario[i]->nome, nome) == 0)// c3, n-1 vezes
        {
            return funcionario[i];// c4, n-1 vezes
        }
    }
    return NULL;// c5, 1 vez
} 

Podemos multiplicar a execução de cada linha pelo tempo que leva para executar essa linha. Então, o tempo total de execução será a soma de todos os tempos de execução de cada linha.

$$ T(n) = c1 + c2(n-1) + c3(n-1) + c4(n-1) + c5 $$

$$ T(n) = (c1 + c5) + (n-1)(c2 + c3 + c4) $$

$$ T(n) = b + (n-1)a $$

$$ T(n) = (n-1)a $$

$$ T(n) = (n-1) $$

$$ T(n) = O(n) $$

buscasequencialfuncionarios's People

Contributors

diegonascimento2023 avatar oluaphenrique avatar

buscasequencialfuncionarios's Issues

Sugestões de Melhorias

Seria interessante colocar no funcionario.c, na função lerarquivo, ao verificar se ao abrir o arquivo ele está vazio ou não, usar EOF.

Sugestões de melhorias

O código apresenta erro na função atualiza
funcionario.c: In function 'atualizarArquivo':
funcionario.c:142:5: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
for (int i = 0; i < count_fun; i++)
^
funcionario.c:142:5: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
main.c: In function 'main':
main.c:65:17: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
for (int i = 0; nome[i] != '\0'; i++)
^
main.c:90:17: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
for (int i = 0; cargo[i] != '\0'; i++)
^
main.c:152:17: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
for (int i = 0; nome[i] != '\0'; i++)
^
main.c:232:5: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
for (int i = 0; i < count_fun; i++)
minha sugestão:
void atualizarArquivo(FILE *fp, int n, Funcionario **funcionario)
{
FILE *fp = fopen("saida.txt", "w"); // Abre o arquivo para escrita, substituindo se necessario o conteúdo existente

if (fp == NULL)
{
    printf("Erro ao abrir o arquivo para atualização.\n");
    exit(1); // Trate o erro adequadamente
}
for (int i = 0; i < n; i++)
{
 fprintf(fp, "%s\t%s\t%lld\n", funcionario[i]->nome, funcionario[i]->cargo, funcionario[i]->documento);
}
fclose(fp)

}

Sugestões de melhorias.

1- não colocar limites de funcionários, ao invés disso façam alocação dinâmica por exemplo utilizando realloc.

    int op, documento, count_fun = 0;
    int nomeValido = 0;

    char nome[100], cargo[50];

    Funcionario *funcionario[fun];

2- Calcular apenas o tempo de execução das funçoes de busca e nao do programa inteiro.

    clock_t inicio = clock();
    double tempo = (double)(clock() - inicio) / CLOCKS_PER_SEC;
    tempo = tempo * 1000; // milisegundos

3- Dar free nas alocações ao fim do programa.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.