Cocktail Sort

Cocktail Sort :

Author(s) : Unknown Date : 1956

Cocktail sort, also known as bidirectional bubble sort, cocktail shaker sort, or ripple 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.

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 cocktail_sort(arr):
	n = len(arr)
	swapped = True
	start = 0
	end = n - 1
	while swapped:
		swapped = False
		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 = end - 1
		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 = start + 1
function cocktailSort(arr) {
	let swapped = true;
	let start = 0;
	let end = arr.length - 1;
	while (swapped) {
		swapped = false;
		for (let i = start; i < end; i++) {
			if (arr[i] > arr[i + 1]) {
				[arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
				swapped = true;
			}
		}
		if (!swapped) break;
		swapped = false;
		end--;
		for (let 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++;
	}
}
public static void cocktailSort(int[] arr) {
	boolean swapped = true;
	int start = 0;
	int end = arr.length - 1;
	while (swapped) {
		swapped = false;
		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;
			}
		}
		if (!swapped) break;
		swapped = false;
		end--;
		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++;
	}
}
func cocktailSort(arr []int) {
	swapped := true
	start := 0
	end := len(arr) - 1
	for swapped {
		swapped = false
		for i := start; i < end; i++ {
			if arr[i] > arr[i+1] {
				arr[i], arr[i+1] = arr[i+1], arr[i]
				swapped = true
			}
		}
		if !swapped {
			break
		}
		swapped = false
		end--
		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++
	}
}
void cocktailSort(int arr[], int n) {
	int swapped = 1;
	int start = 0;
	int end = n - 1;
	while (swapped) {
		swapped = 0;
		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;
			}
		}
		if (!swapped) break;
		swapped = 0;
		end--;
		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++;
	}
}
light dark