Losowe sortowanie listy
Wklej listę elementów i losowo potasuj kolejność. Fisher-Yates shuffle. Do losowania kolejności drużyn, pytań quizowych, kolejności prezentacji. Bezpłatnie.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Elementy w wyniku
oryginalnie 8, po czyszczeniu 8
Algorytm tasowania
pętla od ostatniego elementu z losową zamianą — każda permutacja równie prawdopodobna
Losowanie
kryptograficznie bezpieczne — wyniku nie da się przewidzieć ani odtworzyć
Usunięte duplikaty
opcja „Unikalne” — duplikaty rozpoznawane bez wielkości liter
Radia Perlman Margaret Hamilton Tim Berners-Lee Grace Hopper Katherine Johnson Ada Lovelace Claude Shannon Alan Turing
| Cecha | Jak to robi kod narzędzia | Co to oznacza w praktyce |
|---|---|---|
| Algorytm | Fisher–Yates: pętla od ostatniego elementu (i = n−1 … 1), losowanie j z zakresu 0–i, zamiana elementów i oraz j | każda z n! permutacji jest jednakowo prawdopodobna — żadna pozycja nie ma przewagi |
| Losowanie bez ziarna | random_int(0, i) — generator kryptograficznie bezpieczny (CSPRNG) | uczciwe losowanie: wyniku nie da się przewidzieć ani odtworzyć |
| Losowanie z ziarnem | mt_srand(seed), potem mt_rand(0, i) — generator Mersenne Twister | ten sam seed i ta sama lista zawsze dają identyczny układ — do audytu i odtworzenia losowania |
| Czyszczenie przed tasowaniem | opcje: Przytnij (usunięcie spacji), Usuń puste wiersze, Unikalne (duplikaty rozpoznawane bez wielkości liter) | najpierw porządek na liście, potem losowanie — żaden uczestnik nie dostaje dwóch pozycji |
| Krok | Pozycja i | Losowanie j | Operacja |
|---|---|---|---|
| Krok 1 | i = 4 (ostatni element) | j = losowo z 0–4 | zamiana elementów nr 4 i j |
| Krok 2 | i = 3 | j = losowo z 0–3 | zamiana elementów nr 3 i j |
| Krok 3 | i = 2 | j = losowo z 0–2 | zamiana elementów nr 2 i j |
| Krok 4 | i = 1 | j = losowo z 0–1 | zamiana elementów nr 1 i j — koniec; element 0 zostaje, bo wszystkie pozycje już potasowano |
Tasowanie uruchamia się tylko dla list z co najmniej dwoma elementami — pojedynczy element nie ma czego mieszać.
Warto wiedzieć — losowa kolejność listy
Do czego się przydaje
Kolejność prezentacji na zajęciach, przydział zadań w zespole, losowanie prezentów, kolejność wystąpień na spotkaniu, tasowanie pytań quizu. Wszędzie tam, gdzie trzeba sprawiedliwie rozstrzygnąć, kto lub co idzie pierwszy — bez „wyczuwania” wzoru.
Ziarno = powtarzalność
Losowanie z ziarnem (seed) daje zawsze ten sam układ dla tej samej listy — można je odtworzyć przy sporze „kto był pierwszy” albo pokazać grupie, że kolejność nie była ręcznie układana. Bez ziarna każde uruchomienie daje inny wynik, a random_int gwarantuje, że nikt go nie przewidzi.
Czym różni się od „sortowania z Math.random”
Popularny trik „posortuj porównując losowo” daje przekrzywiony rozkład — niektóre kolejności występują częściej niż inne. Fisher–Yates (ten z kodu narzędzia) losuje zamianę dla każdej pozycji z osobna, więc wszystkie n! permutacji mają dokładnie równą szansę.
Najpierw porządek, potem losowanie
Włączne opcje Przytnij i Usuń puste ratują od „duchów” w wyniku (spacje, puste wiersze), a Unikalne wycina duplikaty rozpoznawane bez wielkości liter — Ada i ADA to ten sam wpis. Separator wyjścia (wiersz albo przecinek) dobierz pod miejsce, gdzie wkleisz wynik.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćLosowe sortowanie listy – shuffle listy elementów algorytmem Fisher-Yates
Losowe tasowanie (shuffle) listy jest przydatne w wielu sytuacjach: losowanie kolejności drużyn, tasowanie pytań quizowych, randomizacja playlisty, losowanie kto pierwszy prezentuje. Narzędzie używa algorytmu Fisher-Yates (Knuth shuffle) – statystycznie poprawne tasowanie.
Algorytm Fisher-Yates (Knuth shuffle)
Opis: przejdź listę od końca do początku, dla każdego elementu i wylosuj j ∈ [0,i], zamień i z j. Złożoność: O(n). Wynik: każda permutacja jest jednakowo prawdopodobna (uniform distribution). Pseudokod: for i from n-1 down to 1: j = random(0, i); swap(array[i], array[j]). JavaScript: implementacja w 4 linijkach.
Naiwne błędy przy tasowaniu
Błąd: for each item: swap with random other item. Problem: nie daje równomiernego rozkładu! Przykład z 3 elementami: powinno być 6 permutacji z równym prawdopodobieństwem. Naiwny algorytm: niektóre permutacje pojawiają się 2× częściej. Rozwiązanie: zawsze Fisher-Yates lub Sattolo (jeśli chcesz cyclic permutation).
Zastosowania losowego tasowania
Edukacja: losuj kolejność uczniów do odpowiedzi. Gry: tasuj talie kart, pytania quizowe, order of play. Praca: losuj kolejność prezentacji, losuj kto dostaje zadanie. Muzyka: shuffle playlisty. Research: randomizacja grup badanych. A/B testing: randomizacja wariantów. Turnieje: losowanie drabinki.
Tasowanie w różnych językach
JavaScript: array.sort(() => Math.random() - 0.5) – ZŁE! Nie Fisher-Yates. Poprawnie: Fisher-Yates loop. Python: random.shuffle(lista) – wbudowany, poprawny. PHP: shuffle($array) – wbudowany Fisher-Yates. Ruby: array.shuffle. Java: Collections.shuffle(list). SQL: ORDER BY RANDOM() lub NEWID() (MS SQL) – do losowania wierszy.
Mechanizm: losowanie bez zwracania i rosnący zbiór ustalonych pozycji
Podstawą jest losowanie bez zwracania. Lista przechodzona jest od ostatniego indeksu w dół, a na każdym kroku losowany jest indeks z przedziału od 0 do aktualnego i. Każda wartość w tym przedziale ma takie samo prawdopodobieństwo 1/(i+1), a wybrany element ląduje na pozycji i i po zamianie nie jest już nigdy brany pod uwagę. To właśnie ta rosnąca liczba pozycji ustalonych odróżnia poprawny algorytm od przypadkowego zamieniania par elementów.
Łączne prawdopodobieństwo konkretnej kolejności to iloczyn pojedynczych szans. Dla n elementów wykonujemy n-1 losowań, a iloczyn n, n-1, n-2, ..., 2 daje n!. Każda z n! permutacji jest więc równie prawdopodobna i wynosi 1/n!. Dla trzech elementów to 6 możliwych wyników, dla czterech 24, dla dziesięciu 3 628 800.
Drugim składnikiem jest źródło liczb losowych. W przeglądarce działa generator pseudolosowy inicjalizowany entropią systemową: szybki i wystarczająco równomierny do tasowania pytań quizowych, playlisty czy kolejności prezentacji, ale niekryptograficzny. Koszt obliczeniowy jest minimalny: n-1 losowań, czas O(n) i stała pamięć dodatkowa, ponieważ elementy przestawiane są w miejscu.
Przykład krok po kroku na czterech elementach
- Wejście: lista A, B, C, D. Pozycje: 0 = A, 1 = B, 2 = C, 3 = D.
- Krok 1: i = 3, losujemy j z zakresu 0-3. Wypada 1, czyli element B. Zamieniamy D (pozycja 3) z B (pozycja 1). Lista: A, D, C, B. Pozycja 3 jest od tej chwili zamknięta.
- Krok 2: i = 2, losujemy j z zakresu 0-2. Wypada 0, czyli A. Zamieniamy C (pozycja 2) z A. Lista: C, D, A, B.
- Krok 3: i = 1, losujemy j z zakresu 0-1. Wypada 1, czyli element na pozycji 1. Zamiana z samym sobą nic nie zmienia, lista pozostaje: C, D, A, B.
- Krok 4: i osiągnęło 0, pętla się kończy. Wynik: C, D, A, B.
- Sprawdzenie: przy czterech elementach istnieją 24 permutacje, więc prawdopodobieństwo tej konkretnej kolejności wynosi 1/24, czyli około 0,0417. Losowania są niezależne, dlatego po ponownym uruchomieniu na tym samym wejściu wynik będzie najprawdopodobniej inny.
Ile losowań i ile możliwych wyników
| Liczba elementów (n) | Liczba losowań (n-1) | Liczba możliwych permutacji (n!) |
|---|---|---|
| 3 | 2 | 6 |
| 4 | 3 | 24 |
| 5 | 4 | 120 |
| 6 | 5 | 720 |
| 8 | 7 | 40320 |
| 10 | 9 | 3628800 |
Jak przygotować listę przed tasowaniem
- Jeden element w wierszu - najprostszy format wejścia. Jeśli wklejasz dane z arkusza, usuń nagłówki kolumn, bo zostaną potraktowane jako zwykłe elementy i przesuną kolejność.
- Usuń puste wiersze - pusty wiersz bywa traktowany jako osobny element, przez co w wyniku pojawi się puste miejsce w kolejności, a liczba pozycji nie zgodzi się z liczbą uczestników lub pytań.
- Pamiętaj, że duplikaty to osobne elementy - gdy ta sama wartość występuje dwa razy, tasowanie traktuje każde wystąpienie niezależnie. Przy powtórzeniach wynik może wyglądać na niezmieniony, choć kolejność faktycznie się zmieniła.
- Porównaj długość przed i po - skopiuj wynik i sprawdź, czy liczba pozycji się zgadza. To najszybszy sposób wychwycenia sklejonych wierszy albo pominiętego separatora.
- Zapisz wynik, jeśli ma być powtórzony - pojedyncze tasowanie bez ziarna nie da się odtworzyć. Kolejność potrzebną na później po prostu skopiuj i zachowaj.
Czego tasowanie nie gwarantuje
- Losowość generatora, nie fizyczna - wynik pochodzi z pseudolosowego generatora przeglądarki. Do zabawy, quizu czy losowania kolejności prezentacji to wystarcza, ale nie spełnia wymogów loterii i losowań regulowanych prawnie, gdzie potrzebny jest certyfikowany generator.
- Brak odtwarzalności - bez ziarna nie odtworzysz tej samej kolejności drugi raz. Przy dziesięciu elementach szansa na przypadkowe powtórzenie identycznego wyniku to 1 na 3 628 800.
- Brak warunków na wynik - narzędzie zwraca zwykłą permutację, w której każde ustawienie jest równie prawdopodobne. Nie sprawdzi, czy dwie osoby z tej samej grupy nie stoją obok siebie ani czy pytania z jednego działu nie wypadły pod rząd.
- Nierozróżnialne powtórzenia i formatowanie - elementy identyczne znakowo wyglądają w wyniku tak samo, a spacje i wielkość liter nie są normalizowane. Zapis Ala i ala to dwa różne elementy, mimo że dla człowieka znaczą to samo.
Najczęstsze pytania
Czy array.sort(Math.random) w JS jest losowy?
NIE – to popularny błąd. Array.sort nie gwarantuje uniform distribution przy losowej funkcji porównującej. Różne silniki JS (V8, SpiderMonkey) dają różne wyniki. Na przykład V8: elementy na początku listy mają wyższe szanse bycia na początku po "shuffle". Zawsze używaj Fisher-Yates dla poprawnego tasowania.
Jak wylosować N elementów z listy bez powtórzeń?
Metoda 1: shuffle Fisher-Yates → weź pierwsze N elementów. Metoda 2: iterate N razy, losuj i usuwaj z puli. Metoda 3: reservoir sampling – dla bardzo dużych list. Python: random.sample(lista, N). JavaScript: shuffle(array).slice(0, N). SQL: SELECT * FROM tabela ORDER BY RANDOM() LIMIT N.
Jak używać narzędzia do losowania kolejności prezentacji?
Wklej imiona (jedno per linia): Ania\nBasia\nKarol\nDarek. Kliknij Shuffle. Wynik: losowa kolejność. Odśwież dla nowego losowania. Możliwość kopiowania wynikowej listy. Opcjonalnie: ponumeruj automatycznie (1. Ania, 2. Karol...).
Seed losowania – jak odtworzyć ten sam wynik?
Seeded PRNG: podaj seed → ta sama sekwencja za każdym razem. Przydatne: gdy chcesz udokumentować losowanie (transparentność). Math.random() w JS: nie seeded, różny przy każdym odświeżeniu. Seeded: seedrandom biblioteka (npm). Python: random.seed(42). Użyj datę losowania jako seed.
Ile możliwych kolejności ma lista N elementów?
N! (silnia N). 5 elementów: 5! = 120. 10 elementów: 10! = 3 628 800. 20 elementów: 20! ≈ 2.43 × 10^18 (astronomiczna liczba). Każda karta w talii 52 kart: 52! ≈ 8×10^67 – więcej niż atomów we wszechświecie. Dlatego każde tasowanie talii kart jest unikalne w historii.
Czy losowe sortowanie listy jest naprawdę losowe?
Tak, jeśli lista przechodzona jest algorytmem Fishera-Yatesa: każda z n! permutacji ma wtedy to samo prawdopodobieństwo 1/n!. Losowość pochodzi z generatora pseudolosowego przeglądarki, który jest wystarczający dla typowych zastosowań, ale nie jest kryptograficzny.
Ile razy tasować listę, żeby kolejność była w pełni losowa?
Jedno pełne przejście wystarcza. Po każdym kolejnym tasowaniu rozkład wyników nadal jest równomierny, więc powtarzanie nie poprawia losowości, a jedynie mnoży liczbę wykonanych operacji.
Jak wylosować kolejność bez powtórzeń?
Tasowanie całej listy daje permutację, w której każdy element występuje dokładnie raz, więc powtórzenia są wykluczone z definicji. Jeśli potrzebujesz tylko kilku pierwszych pozycji, potasuj całość i weź początek wyniku.
Czym różni się tasowanie od losowania ze zwracaniem?
Tasowanie to losowanie bez zwracania: raz wybrany element nie może już wypaść ponownie, bo jego pozycja jest zamknięta. Losowanie ze zwracaniem dopuszcza powtórzenia, dlatego ten sam element może pojawić się kilka razy.
Czy można odtworzyć wynik tasowania?
Nie, bez zapisanego ziarna generatora nie ma sposobu, aby powtórzyć dokładnie tę samą kolejność. Jeśli wynik ma być później użyty drugi raz, zapisz go lub skopiuj zaraz po tasowaniu.
Powiązane narzedzia: losowanie z listy imion, generator losowej liczby i kolo fortuny.