貼上名單(一行一個名字),或直接輸入總人數,設定分組方式後一鍵隨機分組。適合老師課堂分組、團康活動、小組討論。
本工具的分組邏輯分兩步:先把整份名單徹底打亂順序,再依組數輪流發放。打亂順序用的是 shuffle() 函式實作的 Fisher-Yates 洗牌演算法——從名單最後一個位置開始,跟前面隨機一個位置交換,往前一路做到第二個位置為止。這個演算法的重點在於它是「均勻分布」的:每一種排列組合出現的機率完全相等,不會有些人因為原本排在名單前面或後面就比較容易被分到特定組別。很多人自己手動用「看感覺」分組,或用簡陋的排序方式(例如按名字字母排序後平均切)打亂,其實都不是真正均勻的隨機,容易不自覺帶入偏好。
洗牌後,工具用 shuffled.forEach((name, i) => groups[i % numGroups].push(name)) 這行邏輯把人依序輪流塞進各組,也就是第 1 個人進第 1 組、第 2 個人進第 2 組……輪完一輪再從第 1 組繼續。這保證了當總人數除以組數有餘數時,餘數會平均分散到前幾組,每組人數差距最多只有 1 人,不會出現「洗完牌從頭切一刀」導致最後一組人數特別少的狀況。這也是為什麼小提醒特別強調人數差距最多 1 人——這不是巧合,是演算法設計上刻意保證的結果。
很多人想要的其實不是統計學上的隨機,而是「平衡的組別」,例如老師想讓每組都有能力好和能力弱的學生搭配、或活動主辦想讓每組性別比例平均。這種需求叫「分層抽樣」或「配對分組」,跟本工具做的單純隨機洗牌是兩回事——如果直接把全班名單丟進來隨機分組,理論上完全有可能出現某一組剛好都是成績好的學生、另一組剛好都是比較安靜的學生,這是隨機演算法正確運作下自然會發生的機率現象,不是工具出錯。如果需要能力或屬性平衡的分組,正確做法是先手動把人依屬性分成幾個子名單(例如按成績高中低分三批),每批各自用本工具隨機分組後再合併,這樣才能兼顧「組內隨機」與「組間平衡」。
假設你是老師,班上有 23 位學生,想分成 4 組進行課堂討論。把「分組方式」設為「依組數分組」、右邊數字填 4,貼上 23 個學生姓名後按「開始分組」。23 除以 4 商 5 餘 3,所以會有 3 組各 6 人、1 組 5 人——差距正好符合小提醒說的最多差 1 人。如果你更在乎每組人數固定為 5 人、組數多少無所謂,就改選「依每組人數分組」、填 5,工具會自動算出需要 5 組(23÷5 無條件進位=5),最後一組人數會比其他組少。兩種模式的差別在於你是「先定組數」還是「先定組內人數」,可以依實際場地或活動需求選擇。
是真正的隨機。分組使用 Fisher-Yates 洗牌演算法,底層依賴 JavaScript 的 Math.random(),每一種排列出現的機率理論上完全相等,不會偏向名單中特定位置的人。同一份名單重複按「開始分組」,每次結果都會不同。
不會。整個分組運算都在你的瀏覽器本機用 JavaScript 完成,頁面沒有任何把名單或結果傳送到伺服器的程式碼,關掉分頁或重新整理,所有資料就會消失,不會留下紀錄。
只有在總人數剛好能被組數整除時,每組人數才會完全相同。無法整除時,工具採輪流分配的方式,讓多出來的人平均分散到前面幾組,最多只會有 1 人的差距,這是為了盡量公平而設計的邏輯,不是分組出錯。
目前的版本不支援指定特定成員的分組限制,每次分組都是對整份名單做均等隨機分配。如果有這種需求(例如避免特定學生分在同一組),建議的做法是先手動把這些人排除、剩下的人先分組,再手動把被排除的人分別加進不同組別。
系統會依你填的總人數自動產生「成員 1」「成員 2」……這樣的編號名單,再照樣進行隨機分組。這適合只是想預覽分組結果、還沒有實際名單的情境,例如場地或活動人數還沒確定名字時先抓感覺。