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.



Follow us on Facebook and Twitter for latest update.