Implementación del algoritmo Bubble Sort (ordenamiento de burbuja) en PHP

Author
Por Darío Rivera
Publicado el en PHP

Si aún no sabes qué es el Bubble Sort te invito a ver nuestro anterior post Algoritmo de Ordenamiento de Burbuja. En esta oportunidad veremos una implementación del algoritmo de ordenamiento de burbuja o Bubble Sort en PHP. Let's do it!.

class BubbleSort
{
    public static function sort(array $collection): array
    {
        $n = count($collection);
        for ($i = 1; $i <= $n - 1; $i++) {
            for ($j = 1; $j <= $n - $i; $j++) {
                $item = $collection[$j - 1];
                $nextItem = $collection[$j];

                if ($item > $nextItem) {
                    $collection[$j - 1] = $nextItem;
                    $collection[$j] = $item;
                }
            }
        }

        return $collection;
    }
}

Para ordenar un array de elementos desordenada basta utilizar la función estática de esta clase así.

$collection = [30, 20, 10, 5, 0];
$ordered = BubbleSort::sort($collection);  // [0, 5, 10, 20, 30]

Implementación Optimizada

Para evitar que el algoritmo realice la misma serie de iteraciones aún si recibiera una collección de elementos ordenada, podemos agregar una variable que indique si se hizo intercambio en la última iteración y de esta manera optimizar el algoritmo.

class BubbleSort
{
    public static function sort(array $collection): array
    {
        $n = count($collection);
        for ($i = 1; $i <= $n - 1; $i++) {
            $swapped = false;
            for ($j = 1; $j <= $n - $i; $j++) {
                $item = $collection[$j - 1];
                $nextItem = $collection[$j];

                if ($item > $nextItem) {
                    $swapped = true;
                    $collection[$j - 1] = $nextItem;
                    $collection[$j] = $item;
                }
            }

            if (!$swapped) {
                break;
            }
        }

        return $collection;
    }
}

Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.