sort/cocktail-shaker-sort
칵테일 셰이커 정렬
- 최선
- O(n)
- 평균
- O(n^2)
- 최악
- O(n^2)
- 공간
- O(1)
- 안정성
- 안정
- 방식
- 비교 기반
언어를 고르면 코드가 열린다
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; } }