gpt4 book ai didi

c - qsort 是否需要一致的比较,或者我可以用它来洗牌吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:11:43 25 4
gpt4 key购买 nike

更新:请将其归档在坏主意下。生活中没有免费的东西,这就是证据。一个简单的想法坏了。然而,这绝对是值得学习的东西。

惰性编程挑战。如果我为 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 条非平凡行?

最佳答案

坏主意。我是说真的很糟糕。

你的解决方案给出了一个不可预测的结果,而不是一个随机的结果,并且有一个的差异。您不知道带有随机比较的 qsort 会做什么,也不知道所有组合的可能性是否相同。这是洗牌最重要的标准:所有组合的可能性必须相同。有偏见的结果等于大麻烦。在您的示例中无法证明这一点。

您应该实现 Fisher-Yates shuffle (也称为 Knuth 洗牌)。

关于c - qsort 是否需要一致的比较,或者我可以用它来洗牌吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/790083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com