微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在对 1 亿个元素进行排序时,我应该使用链表还是数组?

如何解决在对 1 亿个元素进行排序时,我应该使用链表还是数组?

我想实现快速排序、归并排序等算法,同时处理大数据文件,比如 1 亿个元素。我不能使用 std::vectorstd::sort 或类似的东西,因为这是了解这些特定算法的学校作业。我只能使用我只会自己写的东西。

我应该使用链表还是数组来实现排序算法?在处理大数据方面,这两者中哪一个更有效?使用其中之一有什么好处?

解决方法

如果元素数量很大,更好的选择是数组(或任何具有连续内存存储的类型,即 new []、使用 next 分配等)。链表通常不会将其节点存储在连续内存中。连续内存方面导致更好的cache friendliness

除此之外,链表(假设是双向链表)需要为每个数据项存储指向下一个和上一个元素的 previousnext 指针,因此需要每个数据项有更多的内存。即使对于单向链表,std::sort 指针也必须存在,因此即使开销比双向链表少,但仍然比数组开销大。

另一个与使用数组的效率无关的原因是排序算法易于实现。链表的排序算法比数组更难实现,尤其是处理非相邻元素的算法。

另外,请注意 std::array 是一个算法,它不是一个容器。因此它可以处理常规数组,std::vectorstd::dequestd::sort 等。因此将 {{1}} 与数组进行比较不是正确的比较。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。