gpt4 book ai didi

c++ - 为什么 std::sort() 比 std::make_heap() 快?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:33 24 4
gpt4 key购买 nike

我有 13721057我的元素 std::vector<Sequence> .我需要对这个 vector 进行排序并获取前 25 个元素。我想,因为你可以在 O(N) 中构建一个堆弹出 25 个元素(每个元素都是 O(logN) )一定比在 O(NlogN) 中对整个 vector 排序更快.

但是,当我对代码计时时:

clock_t tStart = clock();
sort(mostFrequent.begin(), mostFrequent.end(), greater<Sequence>());
printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);

对比

clock_t tStart = clock();
make_heap(mostFrequent.begin(), mostFrequent.end());
printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);

对整个 vector 进行排序似乎要快得多。这是为什么?

最佳答案

这不是一个完整的答案,但要从 13721057 中获取前 25 个元素,您最好使用 partial_sort .

如果只需要第25个元素,那么nth_element .

作为旁注。为了按排序顺序获取第一个小于 X 的元素,我会使用 lambda 执行 auto mid = std::partition,然后执行 std::sort(begin,mid)。可能有更好的方法。

关于c++ - 为什么 std::sort() 比 std::make_heap() 快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34886851/

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