algoalgo-world
algoalgo-world/sort/cocktail-shaker-sort
sort/cocktail-shaker-sort

Cocktail Shaker Sort

best
O(n)
average
O(n^2)
worst
O(n^2)
space
O(1)
stability
stable
method
comparison

pick a language to open the code

def cocktail_shaker_sort(a):
    lo, hi = 0, len(a) - 1
    while lo < hi:
        swapped = False
        for i in range(lo, hi):
            if a[i] > a[i + 1]:
                a[i], a[i + 1] = a[i + 1], a[i]
                swapped = True
        hi -= 1
        for i in range(hi, lo, -1):
            if a[i - 1] > a[i]:
                a[i - 1], a[i] = a[i], a[i - 1]
                swapped = True
        lo += 1
        if not swapped:
            break
function cocktailShakerSort(a) {
  let lo = 0;
  let hi = a.length - 1;
  while (lo < hi) {
    let swapped = false;
    for (let i = lo; i < hi; i++) {
      if (a[i] > a[i + 1]) {
        [a[i], a[i + 1]] = [a[i + 1], a[i]];
        swapped = true;
      }
    }
    hi--;
    for (let i = hi; i > lo; i--) {
      if (a[i - 1] > a[i]) {
        [a[i - 1], a[i]] = [a[i], a[i - 1]];
        swapped = true;
      }
    }
    lo++;
    if (!swapped) break;
  }
}
static void swap(int a[], int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

void cocktail_shaker_sort(int a[], int n) {
    int lo = 0, hi = n - 1;
    while (lo < hi) {
        int swapped = 0;
        for (int i = lo; i < hi; i++) {
            if (a[i] > a[i + 1]) {
                swap(a, i, i + 1);
                swapped = 1;
            }
        }
        hi--;
        for (int i = hi; i > lo; i--) {
            if (a[i - 1] > a[i]) {
                swap(a, i - 1, i);
                swapped = 1;
            }
        }
        lo++;
        if (!swapped) break;
    }
}
void cocktail_shaker_sort(std::vector<int>& a) {
    int lo = 0;
    int hi = static_cast<int>(a.size()) - 1;
    while (lo < hi) {
        bool swapped = false;
        for (int i = lo; i < hi; i++) {
            if (a[i] > a[i + 1]) {
                std::swap(a[i], a[i + 1]);
                swapped = true;
            }
        }
        hi--;
        for (int i = hi; i > lo; i--) {
            if (a[i - 1] > a[i]) {
                std::swap(a[i - 1], a[i]);
                swapped = true;
            }
        }
        lo++;
        if (!swapped) break;
    }
}
static void CocktailShakerSort(int[] a) {
    int lo = 0, hi = a.Length - 1;
    while (lo < hi) {
        bool swapped = false;
        for (int i = lo; i < hi; i++) {
            if (a[i] > a[i + 1]) {
                (a[i], a[i + 1]) = (a[i + 1], a[i]);
                swapped = true;
            }
        }
        hi--;
        for (int i = hi; i > lo; i--) {
            if (a[i - 1] > a[i]) {
                (a[i - 1], a[i]) = (a[i], a[i - 1]);
                swapped = true;
            }
        }
        lo++;
        if (!swapped) break;
    }
}
static void swap(int[] a, int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

static void cocktailShakerSort(int[] a) {
    int lo = 0, hi = a.length - 1;
    while (lo < hi) {
        boolean swapped = false;
        for (int i = lo; i < hi; i++) {
            if (a[i] > a[i + 1]) {
                swap(a, i, i + 1);
                swapped = true;
            }
        }
        hi--;
        for (int i = hi; i > lo; i--) {
            if (a[i - 1] > a[i]) {
                swap(a, i - 1, i);
                swapped = true;
            }
        }
        lo++;
        if (!swapped) break;
    }
}
watch it run, then read it