Cocktail Sort
Cocktail Sort :
Author(s) : Unknown Date : AncientCocktail sort, also known as bidirectional bubble sort, is a variation of bubble sort that iterates through the array in both forward and backward directions. In each pass, it compares adjacent elements and swaps them if necessary. This process continues until a pass completes without any swaps, indicating the array is sorted. While it might seem like a simple improvement over bubble sort, cocktail sort can be slightly more efficient for specific data patterns, particularly when larger elements are clustered near the beginning or end of the array. However, its overall time complexity remains O(n²), making it unsuitable for very large datasets.
Time Complexity | O(n²) |
Best Case | O(n) |
Worst Case | O(n²) |
Space Complexity | O(1) |
Stable | Yes |
Code Integration:
* the code might contain some bugs or may not work correctly
def cocktailshakersort(arr):
n = len(arr)
swapped = True
start = 0
end = n - 1
while swapped:
swapped = False
# Forward pass (like Bubble Sort)
for i in range(start, end):
if arr[i] > arr[i + 1]:
arr[i], arr[i + 1] = arr[i + 1], arr[i]
swapped = True
end -= 1
# Backward pass (like Bubble Sort)
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
# Test array
arr = [12, 34, 54, 2, 12, 90]
cocktailshakersort(arr)
print('Sorted array is:', arr)
function cocktailshakersort(arr) {
let n = arr.length;
let swapped = true;
let start = 0;
let end = n - 1;
while (swapped) {
swapped = false;
// Forward pass (like Bubble Sort)
for (let i = start; i < end; i++) {
if (arr[i] > arr[i + 1]) {
[arr[i], arr[i + 1]] = [arr[i + 1], arr[i]]; // Swap using destructuring
swapped = true;
}
}
end--;
// Backward pass (like Bubble Sort)
for (let i = end - 1; i > start; i--) {
if (arr[i] > arr[i + 1]) {
[arr[i], arr[i + 1]] = [arr[i + 1], arr[i]]; // Swap using destructuring
swapped = true;
}
}
start++;
}
// Test array
let arr = [12, 34, 54, 2, 12, 90];
cocktailshakersort(arr);
console.log('Sorted array is:', arr);
}
public static void cocktailshakersort(int[] arr) {
int n = arr.length;
boolean swapped = true;
int start = 0;
int end = n - 1;
while (swapped) {
swapped = false;
// Forward pass (like Bubble Sort)
for (int i = start; i < end; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = true;
}
}
end--;
// Backward pass (like Bubble Sort)
for (int i = end - 1; i > start; i--) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = true;
}
}
start++;
}
// Test array
int[] arr = {12, 34, 54, 2, 12, 90};
cocktailshakersort(arr);
System.out.println("Sorted array is:" + java.util.Arrays.toString(arr));
}
func cocktailshakersort(arr []int) {
n := len(arr)
swapped := true
start := 0
end := n - 1
for swapped {
swapped = false
// Forward pass (like Bubble Sort)
for i := start; i < end; i++ {
if arr[i] > arr[i+1] {
arr[i], arr[i+1] = arr[i+1], arr[i]
swapped = true
}
}
end--
// Backward pass (like Bubble Sort)
for i := end - 1; i > start; i-- {
if arr[i] > arr[i+1] {
arr[i], arr[i+1] = arr[i+1], arr[i]
swapped = true
}
}
start++
}
// Test array
arr := []int{12, 34, 54, 2, 12, 90}
cocktailshakersort(arr)
fmt.Println("Sorted array is:", arr)
}
void cocktailshakersort(int arr[], int n) {
int swapped = 1;
int start = 0;
int end = n - 1;
while (swapped) {
swapped = 0;
// Forward pass (like Bubble Sort)
for (int i = start; i < end; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = 1;
}
}
end--;
// Backward pass (like Bubble Sort)
for (int i = end - 1; i > start; i--) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = 1;
}
}
start++;
}
// Test array
int arr[] = {12, 34, 54, 2, 12, 90};
int n = sizeof(arr) / sizeof(arr[0]);
cocktailshakersort(arr, n);
printf("Sorted array is: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
}