Algoritmos y estructuras de datos en PHP: en la práctica
\n\nEn el mundo del desarrollo web, PHP sigue siendo uno de los lenguajes más populares. Sin embargo, muchos desarrolladores familiarizados con la sintaxis suelen pasar por alto conceptos fundamentales: los algoritmos y las estructuras de datos. Comprender estos temas no solo mejora la calidad del código, sino que también te hace un profesional más competitivo en las entrevistas. En este artículo, analizaremos los algoritmos y estructuras de datos clave en PHP con ejemplos de código reales que podrás aplicar de inmediato en tus proyectos.
\n\n1. Estructuras de datos básicas: pila y cola
\n\nLa pila y la cola son estructuras de datos lineales que se utilizan con frecuencia en aplicaciones reales. La pila funciona bajo el principio LIFO (Last In, First Out), mientras que la cola sigue el principio FIFO (First In, First Out). En PHP, se pueden implementar utilizando funciones integradas de arrays.
\n\nImplementación de una pila
\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// Ejemplo de uso\n$stack = new Stack();\n$stack->push("Primero");\n$stack->push("Segundo");\n$stack->push("Tercero");\necho $stack->pop(); // Tercero\necho $stack->peek(); // Segundo\n?>\n\nImplementación de una cola
\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// Ejemplo de uso\n$queue = new Queue();\n$queue->enqueue("Primero");\n$queue->enqueue("Segundo");\n$queue->enqueue("Tercero");\necho $queue->dequeue(); // Primero\necho $queue->front(); // Segundo\n?>\n\nEstas estructuras de datos son indispensables para implementar búferes, historial de acciones (deshacer/rehacer) y procesamiento de tareas en orden de llegada.
\n\n2. Algoritmos de ordenamiento en PHP
\n\nEl ordenamiento es una de las operaciones más comunes en programación. Veamos dos implementaciones clásicas: el ordenamiento de burbuja (para aprendizaje) y el ordenamiento rápido (para uso real).
\n\nOrdenamiento de burbuja (Bubble 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 // Intercambio 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\nComplejidad: O(n²) — no es adecuado para arrays grandes, pero demuestra perfectamente el principio.
\n\nOrdenamiento rápido (Quick 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?>