algoalgo-world
algoalgo-world/sort/odd-even-sort
sort/odd-even-sort

Odd-Even 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 odd_even_sort(a):
    n = len(a)
    done = False
    while not done:
        done = True
        for start in (1, 0):
            for i in range(start, n - 1, 2):
                if a[i] > a[i + 1]:
                    a[i], a[i + 1] = a[i + 1], a[i]
                    done = False
function oddEvenSort(a) {
  let done = false;
  while (!done) {
    done = true;
    for (const start of [1, 0]) {
      for (let i = start; i < a.length - 1; i += 2) {
        if (a[i] > a[i + 1]) {
          [a[i], a[i + 1]] = [a[i + 1], a[i]];
          done = false;
        }
      }
    }
  }
}
static void swap(int a[], int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

void odd_even_sort(int a[], int n) {
    int done = 0;
    while (!done) {
        done = 1;
        for (int phase = 1; phase >= 0; phase--) {
            for (int i = phase; i < n - 1; i += 2) {
                if (a[i] > a[i + 1]) {
                    swap(a, i, i + 1);
                    done = 0;
                }
            }
        }
    }
}
void odd_even_sort(std::vector<int>& a) {
    bool done = false;
    while (!done) {
        done = true;
        for (int phase = 1; phase >= 0; phase--) {
            for (size_t i = phase; i + 1 < a.size(); i += 2) {
                if (a[i] > a[i + 1]) {
                    std::swap(a[i], a[i + 1]);
                    done = false;
                }
            }
        }
    }
}
static void OddEvenSort(int[] a) {
    bool done = false;
    while (!done) {
        done = true;
        for (int phase = 1; phase >= 0; phase--) {
            for (int i = phase; i < a.Length - 1; i += 2) {
                if (a[i] > a[i + 1]) {
                    (a[i], a[i + 1]) = (a[i + 1], a[i]);
                    done = false;
                }
            }
        }
    }
}
static void swap(int[] a, int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

static void oddEvenSort(int[] a) {
    boolean done = false;
    while (!done) {
        done = true;
        for (int phase = 1; phase >= 0; phase--) {
            for (int i = phase; i < a.length - 1; i += 2) {
                if (a[i] > a[i + 1]) {
                    swap(a, i, i + 1);
                    done = false;
                }
            }
        }
    }
}
watch it run, then read it