从顶部和底部匹配球员的想法是正确的,但不完全。做一次第一轮的伟大工程:
while (seeds.length)
{
firstRound.push(seeds.shift());
firstRound.push(seeds.pop());
}
1, 2, 3, 4, 5, 6, 7, 8 => 1, 8, 2, 7, 3, 6, 4, 5
...但在第二轮,种子1种子满足2和3满足4.我们需要做的第一件/最后的洗牌每一轮。第一次通过,我们移动每个元素个别。第二次通过,我们移动每个PAIR的元素。第三次通过我们移动四个组的等,直到我们的组大小为seeds.length/2
。像这样:
// this is ruby, aka javascript psuedo-code :)
bracket_list = seeds.clone
slice = 1
while slice < bracket_list.length/2
temp = bracket_list
bracket_list = []
while temp.length > 0
bracket_list.concat temp.slice!(0, slice) # n from the beginning
bracket_list.concat temp.slice!(-slice, slice) # n from the end
end
slice *= 2
end
return bracket_list
这里的阵列将是什么样子,你去通过迭代(括号注明增加组大小):
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
(1, 16), (2, 15), (3, 14), (4, 13), (5, 12), (6, 11), (7, 10), (8, 9)
(1, 16, 8, 9), (2, 15, 7, 10), (3, 14, 6, 11), (4, 13, 5, 12)
(1, 16, 8, 9, 4, 13, 5, 12), (2, 15, 7, 10, 3, 14, 6, 11)
所以现在,底部8名选手被淘汰后,我们剩下1, 8, 4, 5, 2, 7, 3, 6
。在底部4被淘汰之后,我们有1, 4, 2, 3
,最后一轮只有1, 2
。
如果不能够画出括号就很难解释这一点......让我知道我是否可以为你澄清某些事情。
所以对的顺序其实很重要,是吗? – 2011-04-24 16:07:41