Меню

Главная
Случайная статья
Настройки
Bogosort
Материал из https://ru.wikipedia.org

Bogosort (от амер. комп. жарг. bogus — неработоспособный, нефункциональный, бесполезный) — неэффективный алгоритм сортировки, используемый только в образовательных целях и противопоставляемый другим, более реалистичным алгоритмам. Bogosort является частным случаем алгоритма Лас-Вегас.

Существуют две версии этого алгоритма: детерминированная версия, которая перебирает все перестановки до тех пор, пока не будет получен отсортированный массив[2][3], и случайная версия, которая случайным образом переставляет свои входные данные.

Если этот алгоритм использовать для сортировки колоды карт, то сначала в нём нужно проверить, лежат ли все карты по порядку, и если не лежат, то случайным образом перемешать её, проверить лежат ли теперь все карты по порядку, и повторять процесс, пока не отсортируется колода.

Среднее время работы алгоритма:


Содержание

Пример реализации

Далее приведена реализация такого алгоритма на языке C++, причём такая реализация является примером недетерминированного (случайного) алгоритма:
#include <utility>

bool correct(int *arr, int size) {
    while (--size > 0)
        if (arr[size - 1] > arr[size])
            return false;
    return true;
}

void shuffle(int *arr, int size) {
    for (int i = 0; i < size; ++i)
        std::swap(arr[i], arr[(rand() % size)]); 
}

void bogoSort(int *arr, int size) {
    while (!correct(arr, size))
        shuffle(arr, size);
}


Производительность

См. также

Примечания
  1. 1 2 Gruber, H.; Holzer, M.; Ruepp, O., Sorting the slow way: an analysis of perversely awful randomized sorting algorithms, 4th International Conference on Fun with Algorithms, Castiglioncello, Italy, 2007 (PDF), Lecture Notes in Computer Science, vol. 4475, Springer-Verlag, pp. 183–197, doi:10.1007/978-3-540-72914-3_17, Архивировано (PDF) 29 сентября 2020, Дата обращения: 25 февраля 2024.


Ссылки
Downgrade Counter