Update:请将其归档到“坏主意”下。生活中没有任何东西是免费得到的,这就是证据。一个简单的想法却变坏了。但这绝对是值得学习的东西。
惰性编程挑战。如果我传递一个函数,该函数对于 qsort 的比较函数返回 50-50 返回 true 或 false,我认为我可以有效地对编写 3 行代码的结构数组进行取消排序。
int main ( int argc, char **argv)
{
srand( time(NULL) ); /* 1 */
...
/* qsort(....) */ /* 2 */
}
...
int comp_nums(const int *num1, const int *num2)
{
float frand =
(float) (rand()) / ((float) (RAND_MAX+1.0)); /* 3 */
if (frand >= 0.5f)
return GREATER_THAN;
return LESS_THAN;
}
我需要寻找什么陷阱吗?是否可以通过交换减少行数,或者这是我从 3 个非平凡行中获得的最干净的行数?
馊主意。我的意思是真的很糟糕。
您的解决方案给出了不可预料的结果,不是一个random结果有一个big不同之处。您并不真正了解随机比较的 qsort 会做什么以及所有组合的可能性是否相同。这是洗牌最重要的标准:所有组合的可能性必须相同。有偏差的结果等于大麻烦。在你的例子中没有办法证明这一点。
您应该实施费舍尔-耶茨洗牌 http://en.wikipedia.org/wiki/Fisher-Yates_shuffle(也称为 Knuth 洗牌)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)