c - 这个倒数计数算法的实现有什么问题呢?

标签 c algorithm sorting mergesort insertion-sort

我正在 www.hackerrank.com 上做一个问题,我已经被困了好几天了。

这是问题的陈述https://www.hackerrank.com/challenges/insertion-sort 。基本上,我必须计算给定数组在 O(nlog(n)) 时间内插入排序中发生了多少次交换。

http://paste.ubuntu.com/12637144/这是我提交的代码。我使用合并排序并计算每个元素被移位的次数。该代码通过了网站一半以上的测试。当它失败时,它不会超时,并且不会出现编译错误或段错误。

此外,当我获得一个失败的测试用例的输入(这是在网站 http://paste.ubuntu.com/12637165/ 上失败的输入)并使用我的代码的这个变体 http://paste.ubuntu.com/12637127/ 对其进行测试时它实际上运行插入排序算法,计算一路上的交换次数,并将其与合并排序计数进行检查,我通过了所有测试。另外,我生成了数千个随机测试用例,它们也都通过了这个测试。

我认为这不是网站的问题,因为在对该问题的讨论中,其他人似乎很好地通过了测试,没有任何问题或投诉。所以也许我误解了这个问题,或者我只是写了错误的算法和算法的测试用例。有人有什么建议吗?

最佳答案

如果 n 可以达到 100000,则 no。反转的次数可以是 ~= n^2/2 ,这不适合 32 位整数。尝试使用 64 位整数进行计数和归并排序的返回值。

关于c - 这个倒数计数算法的实现有什么问题呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32904026/

相关文章:

php - 排序数组 - 该特定值将是第一个

python - 如何根据不同的关键字段对字典进行排序?

无法创建单向链表

javascript - 从数组值生成笛卡尔积对象

c - 排序程序停止工作,没有任何错误

java - 同时计算最快路线和一些点

arrays - 不同子阵列的数量

根据指针创建数据结构的新副本

c++ - 命名管道 : How to block until closed write side is reopened?

c - 从 pop 函数返回错误的地址