Algoritmos e Estruturas de Dados em PHP: na prática
\n\nNo mundo do desenvolvimento web, o PHP continua sendo uma das linguagens mais populares. No entanto, muitos desenvolvedores familiarizados com a sintaxe frequentemente negligenciam conceitos fundamentais — algoritmos e estruturas de dados. Compreender esses tópicos não só melhora a qualidade do código, mas também torna você um profissional mais competitivo em entrevistas. Neste artigo, abordaremos os principais algoritmos e estruturas de dados em PHP com exemplos de código reais que você pode aplicar imediatamente em seus projetos.
\n\n1. Estruturas de dados básicas: pilha e fila
\n\nPilha e fila são estruturas de dados lineares frequentemente usadas em aplicações reais. A pilha funciona pelo princípio LIFO (Last In, First Out), enquanto a fila opera como FIFO (First In, First Out). Em PHP, elas podem ser implementadas usando funções internas de array.
\n\nImplementação da pilha
\n<?php\nclass Stack {\n private $stack = [];\n\n public function push($item) {\n array_push($this->stack, $item);\n }\n\n public function pop() {\n if ($this->isEmpty()) {\n return null;\n }\n return array_pop($this->stack);\n }\n\n public function peek() {\n return end($this->stack);\n }\n\n public function isEmpty() {\n return empty($this->stack);\n }\n}\n\n// Exemplo de uso\n$stack = new Stack();\n$stack->push("Primeiro");\n$stack->push("Segundo");\n$stack->push("Terceiro");\necho $stack->pop(); // Terceiro\necho $stack->peek(); // Segundo\n?>\n\nImplementação da fila
\n<?php\nclass Queue {\n private $queue = [];\n\n public function enqueue($item) {\n array_push($this->queue, $item);\n }\n\n public function dequeue() {\n if ($this->isEmpty()) {\n return null;\n }\n return array_shift($this->queue);\n }\n\n public function front() {\n return reset($this->queue);\n }\n\n public function isEmpty() {\n return empty($this->queue);\n }\n}\n\n// Exemplo de uso\n$queue = new Queue();\n$queue->enqueue("Primeiro");\n$queue->enqueue("Segundo");\n$queue->enqueue("Terceiro");\necho $queue->dequeue(); // Primeiro\necho $queue->front(); // Segundo\n?>\n\nEssas estruturas de dados são indispensáveis na implementação de buffers, histórico de ações (undo/redo) e processamento de tarefas na ordem de chegada.
\n\n2. Algoritmos de ordenação em PHP
\n\nOrdenação é uma das operações mais comuns na programação. Vamos analisar duas implementações clássicas: bubble sort (para aprendizado) e quick sort (para uso real).
\n\nBubble Sort
\n<?php\nfunction bubbleSort(&$arr) {\n $n = count($arr);\n for ($i = 0; $i < $n - 1; $i++) {\n for ($j = 0; $j < $n - $i - 1; $j++) {\n if ($arr[$j] > $arr[$j + 1]) {\n // Troca de valores\n $temp = $arr[$j];\n $arr[$j] = $arr[$j + 1];\n $arr[$j + 1] = $temp;\n }\n }\n }\n}\n\n$numbers = [64, 34, 25, 12, 22, 11, 90];\nbubbleSort($numbers);\nprint_r($numbers); // [11, 12, 22, 25, 34, 64, 90]\n?>\n\nComplexidade: O(n²) — não é adequado para arrays grandes, mas demonstra bem o princípio.
\n\nQuick Sort
\n<?php\nfunction quickSort($arr) {\n if (count($arr) < 2) {\n return $arr;\n }\n\n $pivot = $arr[0];\n $left = $right = [];\n\n for ($i = 1; $i < count($arr); $i++) {\n if ($arr[$i] < $pivot) {\n $left[] = $arr[$i];\n } else {\n $right[] = $arr[$i];\n }\n }\n\n return array_merge(quickSort($left), [$pivot], quickSort($right));\n}\n\n$numbers = [3, 6, 8, 10, 1, 2, 1];\n$sorted = quickSort($numbers);\nprint_r($sorted); // [1, 1, 2, 3, 6, 8, 10]\n?>