这是算法问题,和 JS 无关。这个做法是完全错误的,即使改成了 1 : -1 也一样。
你给的比较方法为“比较两元素,有 50% 机率左边比较大,50% 机率右边比较大”
就来试试,用在简单的排序法上(两两互相比较)︰
若你有两个元素 [A, B],A 在第一个位置的机率是 50% 吗?
画成树状图(A:B 意思是 A, B 相比较)︰
A:B
↙ ↘
A大 B大
位置 1 2
每次分岔都是各 50% 的机率。用你的函式,的确是可以达成
“50% 的机率 A 会在第一个”
但是若有三个元素 [A, B, C]︰
A:B
↙ ↘
A大 B大
↙ ↘
A:C A:C
↙ ↘ ↙ ↘
A大 C大 A大 C大
位置 1 2 2 3
A 有 25% 的机率是第排在一个、50% 的机率是第二个、25% 的机率是第三个。
这结果应该不能称作“够随机”吧?明明资料才 3 个而已。
根据排序方法的不同,画出来的树状图也不同,上面画的树状图只是直觉的把三样元素
比较后排序,而浏览器所选择的排序法也许不同,产生的结果可能更“不够随机”了。
如果想找更深入的讨论或数学证明,可以 google: sort with random comparator
※ 引述《art1 (人,原来不是人)》之铭言:
: google 后有看到 google 宣称已经修复不够随机的问题了,不知道问题出在哪
这是指什么不够随机?连结?
: 难道会是 portable 版本的问题吗?
为什么会觉得这问题和 portable 版本有关?是 portable 版才有的现象吗?
另外,推文提到的“不可预料”是指“无法预料会得到什么结果”,
换句话说,就算程式没有按照你预想的方向走也是正常状况(甚至当机)。