list-shuffler
A list shuffler reorders items into a random sequence β every permutation equally likely if the algorithm is fair. The naive "sort by random number" trick is biased; the correct algorithm is Fisher-Yates (also called Knuth shuffle), which iterates from the end and swaps each element with a random earlier or current element. The ZTools List Shuffler tool implements Fisher-Yates with a configurable RNG: Math.random (fast, fine for games and casual use) or crypto.getRandomValues (cryptographically secure, for raffles and prize draws where fairness can be challenged).
Use casesβ
Run a fair raffleβ
Paste participant names, shuffle, take the top N. Use the crypto-RNG mode so the draw is auditable as fair.
Randomise a quizβ
Question order shouldn't reveal patterns. Shuffle the answer list per session.
Distribute work randomlyβ
Pair-programming rotations: shuffle, then partition. Removes bias from "who works with whom".
Shuffle a playlistβ
Spotify's shuffle is famously not uniform. A clean Fisher-Yates pass over your track list does what users expect.
How it worksβ
- Paste the list β One item per line. Empty lines preserved or skipped per toggle.
- Pick RNG β Standard (Math.random β pseudo-random, deterministic if seeded) or Cryptographic (crypto.getRandomValues β true randomness from the OS).
- Optionally seed β For reproducible shuffles (debugging, replays), provide a seed. Same seed + same input = same output.
- Shuffle and copy β Output is the shuffled list. Re-shuffle for a new order. Original list available alongside.
Examplesβ
Input: [A, B, C, D, E]
Output: One shuffle: [C, A, E, B, D]. Another shuffle: [B, D, A, C, E]. All 120 permutations equally likely.
Input: Seeded shuffle ("seed=42")
Output: Deterministic β every run with seed 42 produces the same result. Useful for tests and reproducible demos.
Input: Cryptographic shuffle of a 1,000-item raffle
Output: crypto.getRandomValues backs the RNG; an attacker can't predict the result without compromising the OS RNG.
Frequently asked questionsβ
Why not sort by a random number?
It's biased. JavaScript's sort calls the comparator multiple times per pair β the resulting permutation is not uniform. Fisher-Yates is the correct algorithm.
Is Math.random good enough?
For games, raffles among friends, randomising tests β yes. For high-stakes (real money raffles, security), use crypto.getRandomValues.
Can someone reverse-engineer the result?
With Math.random and known timing, a determined attacker could narrow down the seed. With crypto.getRandomValues, no β values are sourced from /dev/urandom equivalent.
Does the tool log my list?
No β pure browser. Lists never leave the device.
What's the largest list it handles?
Fisher-Yates is O(n). A million items shuffles in ~100 ms. Browser memory is the only ceiling.
How is this different from the List Randomizer?
Same operation under the hood. We keep both for SEO β different users search for different terms. Internally one shuffle implementation backs both.
Tipsβ
- For raffles, paste participant names, run cryptographic shuffle, screenshot the result. Reproducible audit trail without exposing names elsewhere.
- Seeded shuffles are great for unit tests β the test always sees the same "random" order.
- If you need to draw N winners (without replacement), shuffle and take the first N. Drawing-with-replacement is a different operation β use the Random Picker tool.
Try it nowβ
The full list-shuffler runs in your browser at https://ztools.zaions.com/list-shuffler β no signup, no upload, no data leaves your device.
Last updated: 2026-05-06 Β· Author: Ahsan Mahmood Β· Edit this page on GitHub