众所周知,猴子排序的原理是打乱序列,然后判断是否有序。可以看到,猴子排序的时间复杂度为 \(\Omega(n),O(?)\)。
通常打乱序列的方式为:
for (int i = 0; i < n; ++i) {
swap (arr[i], arr[rand () % n]);
}
(当然 C++11 的 std::shuffle()
函数实现更复杂点)
俩猴排序则是将 swap (arr[i], arr[rand () % n]);
,改成了 swap (arr[rand () % n], arr[rand () % n]);
,随机性更强。严格区分欧皇非酋。
当然如果想要更好的随机性可以改成 std::mt19937
类。