Tipo de coqueteleira

Classificação de coqueteleira – classificação por shaker, uma variante da classificação por bolha bidirecional.
O algoritmo funciona da seguinte maneira:

  1. A direção inicial da pesquisa no loop é selecionada (geralmente da esquerda para a direita)
  2. A seguir no loop, os números são verificados em pares
  3. Se o próximo elemento for maior, eles serão trocados
  4. Ao terminar, o processo de busca recomeça com a direção invertida
  5. A busca é repetida até que não haja mais permutações

A complexidade de tempo do algoritmo é semelhante à bolha – O(n2).

Exemplo de implementação em PHP:

<?php

function cocktailShakeSort($numbers)
{
    echo implode(",", $numbers),"\n";
    $direction = false;
    $sorted = false;
    do {
        $direction = !$direction;        
        $firstIndex = $direction == true ? 0 : count($numbers) - 1;
        $lastIndex = $direction == true ? count($numbers) - 1 : 0;
        
        $sorted = true;
        for (
            $i = $firstIndex;
            $direction == true ? $i < $lastIndex : $i > $lastIndex;
            $direction == true ? $i++ : $i--
        ) {
            $lhsIndex = $direction ? $i : $i - 1;
            $rhsIndex = $direction ? $i + 1 : $i;

            $lhs = $numbers[$lhsIndex];
            $rhs = $numbers[$rhsIndex];

            if ($lhs > $rhs) {
                $numbers[$lhsIndex] = $rhs;
                $numbers[$rhsIndex] = $lhs;
                $sorted = false;
            }
        }
    } while ($sorted == false);

    echo implode(",", $numbers);
}

$numbers = [2, 1, 4, 3, 69, 35, 55, 7, 7, 2, 6, 203, 9];
cocktailShakeSort($numbers);

?>

Ссылки

https://gitlab.com/demensdeum/algorithms/-/blob/master/sortAlgorithms/cocktailShakerSort/cocktailShakerSort.php

Источники

https://www.youtube.com/watch?v=njClLBoEbfI
https://www.geeksforgeeks.org/cocktail-sort/
https://rosettacode.org/wiki/Sorting_algorithms/Cocktail_sort

Leave a Comment

Your email address will not be published. Required fields are marked *