algoalgo-world
algoalgo-world/sort/comb-sort
sort/comb-sort

Comb Sort

best
O(n log n)
average
O(n^2 / 2^p)
worst
O(n^2)
space
O(1)
stability
unstable
method
comparison

p is how many times the gap shrank

pick a language to open the code

def comb_sort(a):
    gap = len(a)
    swapped = True
    while gap > 1 or swapped:
        gap = max(1, gap * 10 // 13)
        swapped = False
        for i in range(len(a) - gap):
            if a[i] > a[i + gap]:
                a[i], a[i + gap] = a[i + gap], a[i]
                swapped = True
function combSort(a) {
  let gap = a.length;
  let swapped = true;
  while (gap > 1 || swapped) {
    gap = Math.max(1, Math.floor((gap * 10) / 13));
    swapped = false;
    for (let i = 0; i + gap < a.length; i++) {
      if (a[i] > a[i + gap]) {
        [a[i], a[i + gap]] = [a[i + gap], a[i]];
        swapped = true;
      }
    }
  }
}
static void swap(int a[], int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

void comb_sort(int a[], int n) {
    int gap = n;
    int swapped = 1;
    while (gap > 1 || swapped) {
        gap = gap * 10 / 13;
        if (gap < 1) gap = 1;
        swapped = 0;
        for (int i = 0; i + gap < n; i++) {
            if (a[i] > a[i + gap]) {
                swap(a, i, i + gap);
                swapped = 1;
            }
        }
    }
}
void comb_sort(std::vector<int>& a) {
    size_t gap = a.size();
    bool swapped = true;
    while (gap > 1 || swapped) {
        gap = std::max<size_t>(1, gap * 10 / 13);
        swapped = false;
        for (size_t i = 0; i + gap < a.size(); i++) {
            if (a[i] > a[i + gap]) {
                std::swap(a[i], a[i + gap]);
                swapped = true;
            }
        }
    }
}
static void CombSort(int[] a) {
    int gap = a.Length;
    bool swapped = true;
    while (gap > 1 || swapped) {
        gap = Math.Max(1, gap * 10 / 13);
        swapped = false;
        for (int i = 0; i + gap < a.Length; i++) {
            if (a[i] > a[i + gap]) {
                (a[i], a[i + gap]) = (a[i + gap], a[i]);
                swapped = true;
            }
        }
    }
}
static void swap(int[] a, int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

static void combSort(int[] a) {
    int gap = a.length;
    boolean swapped = true;
    while (gap > 1 || swapped) {
        gap = Math.max(1, gap * 10 / 13);
        swapped = false;
        for (int i = 0; i + gap < a.length; i++) {
            if (a[i] > a[i + gap]) {
                swap(a, i, i + gap);
                swapped = true;
            }
        }
    }
}
watch it run, then read it