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 validationtests/test_algorithms.py— sort function unit teststests/test_cli.py— E2E CLI tests via Click'sCliRunner
Adding a new algorithm
- Create
big_oh_no/<name>_sort.pywith 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.pyusing 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.pyand 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb10e0c2cc942a13c6e359196762eda3a3ce185b12a64318666bc4adcd102e20
|
|
| MD5 |
b31f2704aac7da04a4f575e740d5c43f
|
|
| BLAKE2b-256 |
3ae43ffc97977e6386ab9544cd9c71715ac09c380ef8d94c01fa5b8a72fe761e
|
Provenance
The following attestation bundles were made for big_oh_no-1.5.0.tar.gz:
Publisher:
release.yml on manifoldlabslimited/big-oh-no
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
big_oh_no-1.5.0.tar.gz -
Subject digest:
eb10e0c2cc942a13c6e359196762eda3a3ce185b12a64318666bc4adcd102e20 - Sigstore transparency entry: 1158721624
- Sigstore integration time:
-
Permalink:
manifoldlabslimited/big-oh-no@d154556ba2d924fe5e79a45961bf90bc2b6d7635 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/manifoldlabslimited
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d154556ba2d924fe5e79a45961bf90bc2b6d7635 -
Trigger Event:
workflow_dispatch
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
951fc902044b62e06ea404fd7cb53c4e3ae9b4f30a7189d1f5da7441755648f4
|
|
| MD5 |
d16673f9ab6814163977f8a4aa85a5d4
|
|
| BLAKE2b-256 |
f4fc3e597c24461c7311ccac96b0fbbaa965e935a357b35ef1f1ea203074aa6b
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
big_oh_no-1.5.0-py3-none-any.whl -
Subject digest:
951fc902044b62e06ea404fd7cb53c4e3ae9b4f30a7189d1f5da7441755648f4 - Sigstore transparency entry: 1158721695
- Sigstore integration time:
-
Permalink:
manifoldlabslimited/big-oh-no@d154556ba2d924fe5e79a45961bf90bc2b6d7635 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/manifoldlabslimited
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d154556ba2d924fe5e79a45961bf90bc2b6d7635 -
Trigger Event:
workflow_dispatch
-
Statement type: