Skip to main content

A collection of utterly useless yet entertaining sorting algorithms

Project description

Big O(No) — Python CLI

CLI-only implementation of intentionally impractical sorting algorithms.

Install

pip install big-oh-no

Usage

big-oh-no --help

# Wait Sort — patience is a virtue
big-oh-no wait 5 2 8 1 3

# Stalin Sort — elements that aren't in order get removed
big-oh-no stalin 5 1 9 2 8 3 10

# Linus Sort — your list gets reviewed, harshly
big-oh-no linus 3 1 7 2 9 5 12

# Bogo Sort — shuffle until it works
big-oh-no bogo 3 2 1
big-oh-no bogo --max-attempts 5000 3 2 1

# Schrödinger Sort — sorted and unsorted until observed
big-oh-no schrodinger 5 3 1 4
big-oh-no schrodinger --meanness 0.8 5 3 1 4

# Urinal Sort — elements pick positions based on personal space
big-oh-no urinal 8 3 6 1 9 2
big-oh-no urinal --awkwardness 1.0 8 3 6 1 9 2

# Digit Sort — sorts by number of digits, not value
big-oh-no digit 170 45 75 90 2 802 66

# Darwin Sort — survival of the fittest permutation
big-oh-no darwin 5 3 1 4 2
big-oh-no darwin --max-generations 200 9 1 8 2 7
big-oh-no darwin --population-size 100 --mutation-rate 0.5 5 3 1 4 2

# Vibe Sort — ask an AI to sort it for you
big-oh-no vibe 5 3 1 4 2
big-oh-no vibe --pro 5 3 1 4 2

Validation

Input is validated at the CLI boundary using Pydantic v2. numbers must be a non-empty list of integers. Invalid input exits with a clear error message — no sorting happens.


Development

Setup

cd python
uv sync
uv run big-oh-no --help

Quick run without installing:

uvx --from . big-oh-no --help

If you see a VIRTUAL_ENV ... does not match the project environment path warning, another virtualenv is active in your shell. It is safe to ignore, or run deactivate before uv commands.

Tests

uv run --extra dev pytest -q

Three test modules:

  • tests/test_validation.py — Pydantic input validation
  • tests/test_algorithms.py — sort function unit tests
  • tests/test_cli.py — E2E CLI tests via Click's CliRunner

Adding a new algorithm

  • Create big_oh_no/<name>_sort.py with a single public sort function. The first return value must always be the sorted list — after that, return whatever the algorithm's persona demands (eliminated elements, total time, hurt feelings, etc.)
  • Add a command in big_oh_no/cli.py using Click, following the pattern of the existing commands
  • Add at least one test in tests/test_algorithms.py
  • Update the algorithm list in the root README.md
  • Add a run example in python/README.md

Making an existing one better

  • Richer Rich output, more flavourful commentary, better edge-case handling — all welcome
  • Do not change the return contract of the sort function without updating big_oh_no/cli.py and the tests

All tests must pass before opening a PR:

uv run --extra dev pytest -q

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

big_oh_no-1.5.0.tar.gz (42.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

big_oh_no-1.5.0-py3-none-any.whl (44.6 kB view details)

Uploaded Python 3

File details

Details for the file big_oh_no-1.5.0.tar.gz.

File metadata

  • Download URL: big_oh_no-1.5.0.tar.gz
  • Upload date:
  • Size: 42.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for big_oh_no-1.5.0.tar.gz
Algorithm Hash digest
SHA256 eb10e0c2cc942a13c6e359196762eda3a3ce185b12a64318666bc4adcd102e20
MD5 b31f2704aac7da04a4f575e740d5c43f
BLAKE2b-256 3ae43ffc97977e6386ab9544cd9c71715ac09c380ef8d94c01fa5b8a72fe761e

See more details on using hashes here.

Provenance

The following attestation bundles were made for big_oh_no-1.5.0.tar.gz:

Publisher: release.yml on manifoldlabslimited/big-oh-no

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file big_oh_no-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: big_oh_no-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 44.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for big_oh_no-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 951fc902044b62e06ea404fd7cb53c4e3ae9b4f30a7189d1f5da7441755648f4
MD5 d16673f9ab6814163977f8a4aa85a5d4
BLAKE2b-256 f4fc3e597c24461c7311ccac96b0fbbaa965e935a357b35ef1f1ea203074aa6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for big_oh_no-1.5.0-py3-none-any.whl:

Publisher: release.yml on manifoldlabslimited/big-oh-no

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page