Algoritmos e estruturas de dados em C#: guia completo para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que algoritmos e estruturas de dados são a base da maestria em C#



Qualquer desenvolvedor que deseja escrever código eficiente e escalável em C#, mais cedo ou mais tarde, enfrenta a necessidade de entender como funcionam os algoritmos e as estruturas de dados. Isso não é apenas teoria acadêmica — é uma ferramenta que permite escolher a solução correta para uma tarefa específica: seja buscar um elemento em um milhão de registros, ordenar uma lista de pedidos ou processar dados em tempo real.



Neste artigo, vamos analisar os conceitos-chave com exemplos práticos em C# (.NET). Você aprenderá o que é complexidade de algoritmos (Big O), quais estruturas de dados estão embutidas no .NET e como usá-las. O material é voltado para iniciantes: começaremos com o simples e gradualmente nos aprofundaremos nos detalhes.



1. Fundamentos: O que são estruturas de dados e algoritmos em C#



1.1 Conceito de estrutura de dados

Estrutura de dados é uma forma de organizar e armazenar dados na memória do computador. Em C# (.NET), temos tanto estruturas embutidas (arrays, listas, dicionários) quanto a possibilidade de criar as próprias. A escolha correta da estrutura impacta diretamente o desempenho da aplicação.



1.2 Conceito de algoritmo

Algoritmo é uma sequência de passos para resolver uma tarefa. Por exemplo, o algoritmo de ordenação bolha ou a busca binária. É importante não apenas saber como escrever o código, mas também entender qual algoritmo escolher para um volume específico de dados.



1.3 Avaliação de complexidade (Notação Big O)

Big O descreve como o tempo de execução de um algoritmo cresce à medida que os dados de entrada aumentam. Principais notações:

  • O(1) — tempo constante (acesso a um elemento do array por índice)
  • O(n) — tempo linear (busca em uma lista não ordenada)
  • O(log n) — tempo logarítmico (busca binária)
  • O(n²) — tempo quadrático (ordenação bolha)

Em C#, para medir o tempo de execução, pode-se usar System.Diagnostics.Stopwatch.



using System.Diagnostics;

int[] data = { 5, 3, 8, 1, 9 };Stopwatch sw = Stopwatch.StartNew();Array.Sort(data); // Ordenação embutida O(n log n)sw.Stop();Console.WriteLine($"A ordenação levou: {sw.ElapsedMilliseconds} ms");


2. Principais estruturas de dados em C# (.NET)



2.1 Arrays (Array)

Array é um conjunto fixo de elementos do mesmo tipo. Em C#, os arrays são indexados a partir de zero. São ideais quando a quantidade de elementos é conhecida antecipadamente.



int[] numbers = new int[5] { 10, 20, 30, 40, 50 };Console.WriteLine(numbers[2]); // Saída: 30// Tentar acessar fora dos limites causará IndexOutOfRangeException


Quando usar: para acesso rápido por índice (O(1)). Não é adequado para adição/remoção frequente de elementos.



2.2 Lista (List<T>)

Array dinâmico do namespace System.Collections.Generic. Expande automaticamente ao adicionar elementos. É uma das estruturas mais populares em C#.



List<string> fruits = new List<string>();fruits.Add("Maçã");fruits.Add("Banana");fruits.Insert(1, "Laranja"); // Inserção na posição 1Console.WriteLine(fruits.Count); // Saída: 3


Quando usar: quando for necessário adicionar elementos frequentemente ao final da lista (O(1) amortizado). Inserção no meio é O(n).



2.3 Dicionário (Dictionary<TKey, TValue>)

Coleção "chave-valor", baseada em tabela hash. Permite buscar rapidamente um valor pela chave.



Dictionary<string, int> ages = new Dictionary<string, int>();ages["Ana"] = 25;ages["Boris"] = 30;

if (ages.ContainsKey("Ana")){ Console.WriteLine($"Idade da Ana: {ages["Ana"]}"); // Saída: 25}


Quando usar: para busca

Blogs

Book Recommendations