EDUCBA Logo

EDUCBA

MENUMENU
  • Explore
    • EDUCBA Pro
    • PRO Bundles
    • Featured Skills
    • New & Trending
    • Fresh Entries
    • Finance
    • Data Science
    • Programming and Dev
    • Excel
    • Marketing
    • HR
    • PDP
    • VFX and Design
    • Project Management
    • Exam Prep
    • All Courses
  • Blog
  • Enterprise
  • Free Courses
  • Log in
  • Sign Up
Home Software Development Software Development Tutorials Software Development Basics Cocktail Sort
 

Cocktail Sort

Kunika Khuble
Article byKunika Khuble
EDUCBA
Reviewed byRavi Rathore

Cocktail Sort

What is Cocktail Sort?

Cocktail Sort, also called Bidirectional Bubble Sort or Shaker Sort, is a variation of the classic Bubble Sort algorithm. Instead of only “bubbling up” the largest element to the end of the list, like Bubble Sort, Cocktail Sort passes through the list forward and backward, pushing the largest elements to the right and the smallest elements to the left simultaneously.

 

 

Think of it as mixing a cocktail — you shake both forward and backward to ensure everything blends evenly. Similarly, Cocktail Sort “shakes” the elements, moving both large and small items toward their correct positions on each pass.

Watch our Demo Courses and Videos

Valuation, Hadoop, Excel, Mobile Apps, Web Development & many more.

Table of Contents

  • What is Cocktail Sort?
  • How Does Cocktail Sort Work?
  • Example
  • Why Use Cocktail Sort?
  • Time and Space Complexity
  • Cocktail Sort Implementation
  • Real-World Applications
  • Comparison with Other Sorting Algorithms

How Does Cocktail Sort Work?

Cocktail Sort works by repeatedly traversing the array in both directions:

  • Forward Pass: Starting from the beginning, compare adjacent elements and swap if the left element is greater than the right one. This “bubbles up” the largest unsorted element to the end.
  • Backward Pass: Then, starting from the end, compare adjacent elements moving backward and swap if needed. This pushes the smallest unsorted element to the beginning.
  • Narrowing Boundaries: After each forward and backward pass, the sorted boundary shrinks from both ends.
  • Repeat: Keep performing these passes until you make no swaps in a full forward and backward pass, which indicates that the array is in order.

Facts:

It was invented as an improvement over Bubble Sort to reduce the number of passes through the list.

Cocktail Sort Example

Let us walk through a simple example:

Unsorted Array:

[5, 1, 4, 2, 8, 0, 2]

Step 1: Forward Pass

  • Compare 5 & 1: Swap → [1, 5, 4, 2, 8, 0, 2]
  • Compare 5 & 4: Swap → [1, 4, 5, 2, 8, 0, 2]
  • Compare 5 & 2: Swap → [1, 4, 2, 5, 8, 0, 2]
  • Compare 5 & 8: No swap
  • Compare 8 & 0: Swap → [1, 4, 2, 5, 0, 8, 2]
  • Compare 8 & 2: Swap → [1, 4, 2, 5, 0, 2, 8]

Step 2 – Backward Pass:

  • Compare 2 & 0: Swap → [1, 4, 2, 0, 5, 2, 8]
  • Compare 0 & 2: Swap → [1, 4, 0, 2, 5, 2, 8]
  • Compare 4 & 0: Swap → [1, 0, 4, 2, 5, 2, 8]
  • Compare 1 & 0: Swap → [0, 1, 4, 2, 5, 2, 8]

You continue this process until the array is in order.

Facts:

If Cocktail Sort makes a full forward and backward pass without any swaps, it knows the array is sorted and stops immediately, saving time on nearly sorted lists!

Why Use Cocktail Sort?

While Cocktail Sort is not the fastest sorting algorithm available, it offers several advantages that make it valuable in specific contexts:

  • Improved performance: By sorting in both directions, Cocktail Sort can handle data where small and large elements are distributed on both ends more efficiently.
  • Simplicity: The algorithm is simple to understand and implement, making it perfect for learning and teaching.
  • Adaptive: Cocktail Sort performs better than Bubble Sort when the list is “nearly sorted,” often requiring fewer passes.
  • Stable: It maintains the original order of equal elements, which is important for specific applications.

Time and Space Complexity

Metric Performance
Best Case O(n) (already sorted)
Average Case O(n²)
Worst Case O(n²)
Space Complexity O(1) (in-place)

Key Insights:

  • Best-case efficiency improves over Bubble Sort because Cocktail Sort can detect if no swaps occur during the forward and backward passes, halting execution early.
  • However, its average and worst-case time complexities remain quadratic (O(n²)), making it inefficient for very large datasets compared to advanced algorithms such as QuickSort or MergeSort.
  • Space complexity is minimal as it sorts in place.

Cocktail Sort Implementation

Here is a clean implementation of cocktail sort in Python and C++:

1. Using Python

def cocktail_sort(arr):
    n = len(arr)
    start = 0
    end = n - 1
    swapped = True
    while swapped:
        swapped = False
        # Forward Pass
        for i in range(start, end):
            if arr[i] > arr[i + 1]:
                arr[i], arr[i + 1] = arr[i + 1], arr[i]
                swapped = True
        if not swapped:
            break
        swapped = False
        end -= 1
        # Backward Pass
        for i in range(end - 1, start - 1, -1):
            if arr[i] > arr[i + 1]:
                arr[i], arr[i + 1] = arr[i + 1], arr[i]
                swapped = True
        start += 1
    return arr
# Test
arr = [5, 1, 4, 2, 0, 8, 2]
print("Unsorted:", arr)
sorted_arr = cocktail_sort(arr)
print("Sorted:", sorted_arr)

Output:

Cocktail Sort Python

2. Using C++

#include 
using namespace std;
void cocktailSort(int arr[], int n) {
    bool swapped = true;
    int start = 0;
    int end = n - 1;
    while (swapped) {
        swapped = false;
        // Forward pass
        for (int i = start; i < end; ++i) { if (arr[i] > arr[i + 1]) {
                swap(arr[i], arr[i + 1]);
                swapped = true;
            }
        }
        if (!swapped)
            break;
        swapped = false;
        --end;
        // Backward pass
        for (int i = end - 1; i >= start; --i) {
            if (arr[i] > arr[i + 1]) {
                swap(arr[i], arr[i + 1]);
                swapped = true;
            }
        }
        ++start;
    }
}
int main() {
    int arr[] = {5, 3, 8, 4, 2, 7, 1, 9};
    int n = sizeof(arr) / sizeof(arr[0]);
    cocktailSort(arr, n);
    cout << "Sorted Array: ";
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    return 0;
}

Output:

Cocktail Sort C++

Real-World Applications

While developers do not use Cocktail Sort in large-scale applications because of its quadratic time complexity, they can use it in:

  • Educational Purposes: Teaching sorting concepts and bidirectional passes.
  • Small Datasets: Where simplicity matters over speed.
  • Nearly Sorted Data: When data is mostly sorted but requires minor adjustments.
  • Embedded Systems: Where minimal memory overhead is essential, and data size is limited.

Comparison with Other Sorting Algorithms

Algorithm Approach Best For Stable?
Bubble Sort Repeated swapping in one direction Very small or mostly unsorted lists ✅ Yes
Cocktail Sort Bidirectional swapping Small or nearly sorted data ✅ Yes
Insertion Sort Builds sorted list one item at a time Small or nearly sorted data ✅ Yes
Quick Sort Divide and conquer using pivots Large, random data sets ❌ No
Merge Sort Divide and conquer with merging Large datasets, guaranteed performance ✅ Yes

Final Thoughts

Cocktail Sort is a simple and stable sorting algorithm that improves on Bubble Sort by sorting in both directions. While it is not the best choice for large datasets due to its quadratic time complexity, it shines when dealing with small or nearly sorted lists. Understanding the Cocktail Sort algorithm helps you grasp key algorithmic concepts, such as bidirectional scanning and optimization of basic sorting techniques. It is a valuable addition to your algorithm toolkit, particularly for educational purposes or specialized scenarios involving small datasets.

Frequently Asked Questions (FAQs)

Q1: Is Cocktail Sort better than Bubble Sort?
Answer: Cocktail Sort is a slight improvement on Bubble Sort. It sorts in both directions, reducing the number of passes required, especially on nearly sorted data.

Q2: Can Cocktail Sort be used for large datasets?
Answer: Not recommended due to its O(n²) time complexity. More efficient algorithms, such as QuickSort or MergeSort, are preferred for large datasets.

Q3: Is Cocktail Sort stable?
Answer: Yes, Cocktail Sort maintains the relative order of equal elements.

Recommended Articles

We hope this article on Cocktail Sort helps you understand how this bidirectional sorting algorithm works with clear examples. Check out these recommended articles for more programming tips.

  1. Bubble Sort in C
  2. Types of Algorithms
  3. Quick sort algorithm
  4. How to Learn to Code For Beginners

Primary Sidebar

Footer

Follow us!
  • EDUCBA FacebookEDUCBA TwitterEDUCBA LinkedINEDUCBA Instagram
  • EDUCBA YoutubeEDUCBA CourseraEDUCBA Udemy
APPS
EDUCBA Android AppEDUCBA iOS App
Blog
  • Blog
  • Free Tutorials
  • About us
  • Contact us
  • Log in
Courses
  • Enterprise Solutions
  • Free Courses
  • Explore Programs
  • All Courses
  • All in One Bundles
  • Sign up
Email
  • [email protected]

ISO 10004:2018 & ISO 9001:2015 Certified

© 2025 - EDUCBA. ALL RIGHTS RESERVED. THE CERTIFICATION NAMES ARE THE TRADEMARKS OF THEIR RESPECTIVE OWNERS.

EDUCBA

*Please provide your correct email id. Login details for this Free course will be emailed to you
Loading . . .
Quiz
Question:

Answer:

Quiz Result
Total QuestionsCorrect AnswersWrong AnswersPercentage

Explore 1000+ varieties of Mock tests View more

EDUCBA

*Please provide your correct email id. Login details for this Free course will be emailed to you
EDUCBA
Free Software Development Course

Web development, programming languages, Software testing & others

By continuing above step, you agree to our Terms of Use and Privacy Policy.
*Please provide your correct email id. Login details for this Free course will be emailed to you
EDUCBA

*Please provide your correct email id. Login details for this Free course will be emailed to you

EDUCBA Login

Forgot Password?

🚀 Limited Time Offer! - 🎁 ENROLL NOW