Cocktail Sort

Cocktail Sort :

Author(s) : Unknown Date : Ancient

Cocktail 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

Python JavaScript Java Go C
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]);
	}
}
light dark