当前位置: 代码网 > it编程>编程语言>C/C++ > C++中std::partial_sort的使用小结

C++中std::partial_sort的使用小结

2025年04月07日 C/C++ 我要评论
std::partial_sort是 c++ 标准库中的一个算法,它可以对容器中的一部分元素进行排序,使得前n个元素按顺序排列,而不保证剩余部分有序。它的时间复杂度为o(n log n + (m-n)

std::partial_sort 是 c++ 标准库中的一个算法,它可以对容器中的一部分元素进行排序,使得前 n 个元素按顺序排列,而不保证剩余部分有序。它的时间复杂度为 o(n log n + (m-n)),其中 m 是整个范围的大小,n 是要排序的元素数量。

1. 语法

#include <algorithm>

template< class randomit >
void partial_sort( randomit first, randomit middle, randomit last );

template< class randomit, class compare >
void partial_sort( randomit first, randomit middle, randomit last, compare comp );
  • first:要排序的范围的起始迭代器。
  • middle:指定排序后的前 n 个元素的终点,即 first + n
  • last:排序范围的结束迭代器。
  • comp(可选):自定义比较函数。

2. 基本用法

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {7, 3, 9, 1, 6, 2, 8, 5, 4};

    // 仅对前 5 个元素排序
    std::partial_sort(vec.begin(), vec.begin() + 5, vec.end());

    // 输出前 5 个排序后的元素
    std::cout << "前 5 个最小的元素: ";
    for (int i = 0; i < 5; ++i) {
        std::cout << vec[i] << " ";
    }
    std::cout << "\n";

    // 输出整个数组
    std::cout << "整个数组: ";
    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << "\n";

    return 0;
}

输出

前 5 个最小的元素: 1 2 3 4 5 
整个数组: 1 2 3 4 5 9 8 7 6 

注意:前 5 个元素是有序的,但整个数组仍然是部分无序的。

3. 使用自定义比较函数

可以使用 std::greater<int>() 进行降序排序:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {7, 3, 9, 1, 6, 2, 8, 5, 4};

    // 获取前 5 个最大的元素(降序)
    std::partial_sort(vec.begin(), vec.begin() + 5, vec.end(), std::greater<int>());

    // 输出前 5 个排序后的元素
    std::cout << "前 5 个最大的元素: ";
    for (int i = 0; i < 5; ++i) {
        std::cout << vec[i] << " ";
    }
    std::cout << "\n";

    return 0;
}

输出

前 5 个最大的元素: 9 8 7 6 5 

4. 与 std::sort 和 std::nth_element 的比较

算法作用复杂度适用场景
std::sort全部排序o(n log n)需要排序整个序列
std::partial_sort仅保证前 n 个元素有序o(n log n + (m-n))只需要最小/最大 n 个有序元素
std::nth_element只保证 n 处的元素正确,左侧比它小,右侧比它大o(m)只需要找到第 n 小的元素,且不关心其他元素顺序

5. 适用场景

  • 求前 k 个最小/最大值
  • 数据流处理(流式计算)
  • top-k 查询
  • 快速获取排名前 n 的元素

到此这篇关于c++中std::partial_sort的使用小结的文章就介绍到这了,更多相关c++ std::partial_sort内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

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

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com