algoalgo-world
algoalgo-world/sort/bogo-sort
sort/bogo-sort

Bogo Sort

best
O(n)
average
O(n * n!)
worst
no bound
space
O(1)
stability
unstable
method
chance

pick a language to open the code

import random


def is_sorted(a):
    return all(a[i] <= a[i + 1] for i in range(len(a) - 1))


def bogo_sort(a):
    while not is_sorted(a):
        random.shuffle(a)
function isSorted(a) {
  for (let i = 0; i + 1 < a.length; i++) {
    if (a[i] > a[i + 1]) return false;
  }
  return true;
}

function shuffle(a) {
  for (let i = a.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [a[i], a[j]] = [a[j], a[i]];
  }
}

function bogoSort(a) {
  while (!isSorted(a)) shuffle(a);
}
static void swap(int a[], int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

static int is_sorted(int a[], int n) {
    for (int i = 0; i + 1 < n; i++) {
        if (a[i] > a[i + 1]) return 0;
    }
    return 1;
}

void bogo_sort(int a[], int n) {
    while (!is_sorted(a, n)) {
        for (int i = n - 1; i > 0; i--) swap(a, i, rand() % (i + 1));
    }
}
void bogo_sort(std::vector<int>& a) {
    std::random_device seed;
    std::mt19937 rng(seed());
    while (!std::is_sorted(a.begin(), a.end())) {
        std::shuffle(a.begin(), a.end(), rng);
    }
}
static bool IsSorted(int[] a) {
    for (int i = 0; i + 1 < a.Length; i++) {
        if (a[i] > a[i + 1]) return false;
    }
    return true;
}

static void BogoSort(int[] a) {
    var rng = new Random();
    while (!IsSorted(a)) {
        for (int i = a.Length - 1; i > 0; i--) {
            int j = rng.Next(i + 1);
            (a[i], a[j]) = (a[j], a[i]);
        }
    }
}
static void swap(int[] a, int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

static boolean isSorted(int[] a) {
    for (int i = 0; i + 1 < a.length; i++) {
        if (a[i] > a[i + 1]) return false;
    }
    return true;
}

static void bogoSort(int[] a) {
    Random rng = new Random();
    while (!isSorted(a)) {
        for (int i = a.length - 1; i > 0; i--) swap(a, i, rng.nextInt(i + 1));
    }
}
watch it run, then read it