w3resource

PHP Searching and Sorting Algorithm: Cocktail sort

PHP Searching and Sorting Algorithm: Exercise-7 with Solution

Write a PHP program to sort a list of elements using Cocktail sort.

Cocktail shaker sort (also known as bidirectional bubble sort, cocktail sort, shaker sort, ripple sort, shuffle sort, or shuttle sort ) is a variation of bubble sort that is both a stable sorting algorithm and a comparison sort. The algorithm differs from a bubble sort in that it sorts in both directions on each pass through the list. This sorting algorithm is only marginally more difficult to implement than a bubble sort and solves the problem of turtles in bubble sorts. It provides only marginal performance improvements, and does not improve asymptotic performance; like the bubble sort, it is not of practical interest, though it finds some use in education.

Visualization of shaker sort :

Sorting shaker sort animation

Sample Solution :

PHP Code :

<?php
// Function to perform Cocktail Shaker Sort on an array
function cocktailSort($my_array)
{
    // If the input is a string, convert it to an array of characters
    if (is_string($my_array))
        $my_array = str_split(preg_replace('/\s+/','',$my_array));

    // Loop until no swaps are made
    do {
        $swapped = false; // Flag to track if any elements were swapped

        // Forward pass through the array
        for($i = 0; $i < count($my_array); $i++) {
            // Check if the next element exists
            if(isset($my_array[$i+1])) {
                // Compare adjacent elements and swap if necessary
                if($my_array[$i] > $my_array[$i+1]) {
                    list($my_array[$i], $my_array[$i+1]) = array($my_array[$i+1], $my_array[$i]);
                    $swapped = true; // Set swapped flag to true
                }
            }			
        }

        // If no swaps were made in the forward pass, break out of the loop
        if ($swapped == false) break;

        $swapped = false; // Reset swapped flag

        // Backward pass through the array
        for($i = count($my_array) - 1; $i >= 0; $i--) {
            // Check if the previous element exists
            if(isset($my_array[$i-1])) {
                // Compare adjacent elements and swap if necessary
                if($my_array[$i] < $my_array[$i-1]) {
                    list($my_array[$i], $my_array[$i-1]) = array($my_array[$i-1], $my_array[$i]);
                    $swapped = true; // Set swapped flag to true
                }
            }
        }
    } while($swapped); // Continue loop until no swaps are made

    return $my_array; // Return the sorted array
}

// Test array
$test_array = array(3, 0, 2, 5, -1, 4, 1);
echo "Original Array :\n";
echo implode(', ',$test_array ); // Display original array
echo "\nSorted Array\n:";
echo implode(', ',cocktailSort($test_array)). PHP_EOL; // Display sorted array
?>

Output:

3, 0, 2, 5, -1, 4, 1                                                
Sorted Array :                                                      
-1, 0, 1, 2, 3, 4, 5

Explanation:

In the exercise above,

  • The code defines a function "cocktailSort()" that implements the Cocktail Shaker Sort algorithm.
  • The function takes an array '$my_array' as input and sorts it in ascending order.
  • If the input is a string, it converts it to an array of characters.
  • The function uses a do-while loop to perform the sorting.
  • Inside the loop, it performs two passes through the array: a forward pass and a backward pass.
  • In each pass, it compares adjacent elements and swaps them if they are in the wrong order.
  • The loop continues until no more swaps are made, indicating the array is sorted.
  • Finally, the sorted array is returned.
  • The code then tests the sorting function with a sample array, displaying the original and sorted arrays.

Flowchart :

Flowchart: PHP - program of Cocktail sort

PHP Code Editor:


Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous: Write a PHP program to sort a list of elements using Bubble sort.
Next: Write a PHP program to sort a list of elements using Comb sort.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://www.w3resource.com/php-exercises/searching-and-sorting-algorithm/searching-and-sorting-algorithm-exercise-7.php