C++ Program for Cocktail Sort
Cocktail Sort is a variation of Bubble sort. The Bubble sort algorithm always traverses elements from left and moves the largest element to its correct position in first iteration and second largest in second iteration and so on. Cocktail Sort traverses through a given array in both directions alternatively.
Algorithm:
Each iteration of the algorithm is broken up into 2 stages:
- The first stage loops through the array from left to right, just like the Bubble Sort. During the loop, adjacent items are compared and if value on the left is greater than the value on the right, then values are swapped. At the end of first iteration, largest number will reside at the end of the array.
- The second stage loops through the array in opposite direction- starting from the item just before the most recently sorted item, and moving back to the start of the array. Here also, adjacent items are compared and are swapped if required.
CPP
#include <bits/stdc++.h>
using namespace std;
void CocktailSort( int a[], int n)
{
bool swapped = true ;
int start = 0;
int end = n - 1;
while (swapped) {
swapped = false ;
for ( int i = start; i < end; ++i) {
if (a[i] > a[i + 1]) {
swap(a[i], a[i + 1]);
swapped = true ;
}
}
if (!swapped)
break ;
swapped = false ;
--end;
for ( int i = end - 1; i >= start; --i) {
if (a[i] > a[i + 1]) {
swap(a[i], a[i + 1]);
swapped = true ;
}
}
++start;
}
}
void printArray( int a[], int n)
{
for ( int i = 0; i < n; i++)
printf ( "%d " , a[i]);
printf ( "\n" );
}
int main()
{
int arr[] = { 5, 1, 4, 2, 8, 0, 2 };
int n = sizeof (arr) / sizeof (arr[0]);
CocktailSort(arr, n);
printf ( "Sorted array :\n" );
printArray(arr, n);
return 0;
}
|
Output:
Sorted array :
0 1 2 2 4 5 8
Worst and Average Case Time Complexity: O(n2).
Best Case Time Complexity: O(n). The best-case occurs when the array is already sorted.
Auxiliary Space: O(1)
Please refer complete article on Cocktail Sort for more details!
Last Updated :
13 Jun, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...