C++ Algorithm nth_element()

2024年8月30日 | 5分钟阅读

C++ Algorithm nth_element() 函数用于将第一个元素和第 n 个元素之间的元素按升序排序,而第 n 个元素和最后一个元素之间的元素则不排序。然而,第 n 个元素和最后一个元素之间的任何元素都不会小于第一个元素和第 n 个元素之间的任何元素。

第一个版本使用运算符 < 比较元素,第二个版本使用 comp 比较元素。

语法

参数

first:一个随机访问迭代器,指向要使用的范围中的第一个元素。

last:一个随机访问迭代器,指向要使用的范围中最后一个元素的后面一个元素。

comp:一个用户定义的二元谓词函数,接受两个参数,如果这两个参数有序则返回true,否则返回false。它遵循严格的弱排序来对元素进行排序。

nth:一个随机访问迭代器,指向范围 [first, last) 中将包含已排序元素的位置。

返回值

复杂度

平均而言,复杂度与 first 和 last 之间的距离呈线性关系:比较元素并可能交换它们,直到元素被正确重新排列。

数据竞争

范围 [first, last) 中的对象会被更改。

异常

如果任何元素比较、元素交换或迭代器上的操作抛出异常,此函数将抛出异常。

注意:无效参数会导致未定义行为。

示例 1

让我们看一个简单的例子来演示 nth_element() 的用法

输出

Before: 1 3 6 1 2 4 7 0 

After: 2 0 1 1 3 4 7 6

示例 2

让我们看另一个简单示例

输出

Elements are:  5 6 4 3 2 6 7 9 3
The median is 5
The second largest element is 7

示例 3

让我们看另一个简单示例

输出

myvector contains: 5 2 3 1 4 6 7 8 9

示例 4

让我们看另一个简单示例

输出

Original vector:
 v1 = ( 0 3 6 9 12 15 1 4 7 10 13 16 2 5 8 11 14 17 )
Position 3 partitioned vector:
 v1 = ( 1 0 2 3 8 5 9 4 7 6 10 16 13 15 12 11 14 17 )
Position 4 partitioned (greater) vector:
 v1 = ( 16 17 14 15 13 12 11 9 7 8 10 6 1 4 5 3 2 0 )
Shuffled vector:
 v1 = ( 13 10 6 3 5 2 0 17 11 8 15 9 7 14 16 1 12 4 )
Position 5 partitioned (UDgreater) vector:
 v1 = ( 14 17 15 16 13 12 10 11 9 8 0 2 7 5 3 1 6 4 )

下一主题C++ 算法