C++ partial_sort(STL partial_sort)排序算法详解

  • 内容
  • 评论
  • 相关

通过示例很容易理解什么是部分排序。假设有一个容器,它保存了 100 万个数值,但我们只对其中最小的 100 个感兴趣。可以对容器的全部内容排序,然后选择前 100 个元素,但这可能有点消耗时间。这时候需要使用部分排序,只需要这些数中的前100个是有序放置的。

对于部分排序,有一个特殊的算法 partial_sort(),它需要 3 个随机访问迭代器作为参数。如果这个函数的参数是 first、second 和 last,那么这个算法会被应用到 [first,last) 这个范围内的元素上。执行这个算法后,[first,second) 会包含降序序列 [first,last) 中最小的 second-first 个元素。

注意,在这个示例中,有一种之前没遇到过的表示方式 [first,last),用它来表示一个元素段,这是一个来自于数学领域的用来定义数字范围的概念——区间。这两个值叫作结束点,在这种表示法中,方括号表示包含相邻的结束点,圆括号表示相邻的结束点不包括在内。 例如,如果 (2,5) 是一个整数区间,2 和 5 都被排除在外,所以它只表示整数 3 和 4;这也被叫作开区间,因为两个结束点都不包含。区间 [2,5) 包含 2 但不包含 5,所以它表示 2、3 和 4。(2,5] 表示 3、4 和 5。[2,5] 表示 2、3、4、5,并且它被叫作闭区间,因为包含了两个结 束点。当然,first 和 last 都是迭代器,并且 [first,last) 表示包含 first 指向的元素而不包含 last 指向的元素,所以可以用它准确表示 C++ 中的范围。

下面这段代码演示了 partial_sort() 算法的工作方式:

size_t count {5}; // Number of elements to be sorted
std::vector<int> numbers {22, 7, 93, 45, 19, 56, 88, 12, 8, 7, 15, 10};
std::partial_sort(std::begin(numbers), std::begin(numbers) + count, std::end(numbers));

执行partial__sort()后的效果如图 1 所示。



图 1 partial_sort() 算法的操作

本文标题:C++ partial_sort(STL partial_sort)排序算法详解

本文地址:http://www.hosteonscn.com/2963.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注