Cocktail Sort
Cocktail Sort :
Author(s) : Unknown Date : 1956Cocktail 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
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++;
}
}