C/C++中nth_element函数
2016-05-16 17:34
489 查看
模板函数
头文件: <algorithm>
函数名: std::nth_element
对给定范围[first,last)内的元素进行重新布置.方法是,nth位置的元素放置的值就是把所有元素排序后在nth位置的值.把所有不大于nth的值放到nth的前面,把所有不小于nth的值放到nth后面.对给定范围内的元素"排序"
随机访问迭代器.指定了需要重新"排序"的范围.包括first,但不包括last.
nth
随机访问迭代器.指向范围[first,last)内的一个位置.这个位置将放置排序后应该放于此位置的元素.
comp
二元函数. 返回bool. 表明是否第一个参数应该排序到第二个参数的前面.此函数不应该修改参数值.可以是一个函数指针或函数对象.
简单的说nth_element算法仅排序第nth个元素(从0开始的索引)
如iarray [first,last) 元素区间
排序后 iarray[nth] 就是第nth大的元素(从0开始)
要注意的是[first,nth) [nth,last)内 的大小循序还不一定
只能确定iarray[nth]是第nth大的元素。
当然 [first,nth) 肯定是不大于 [nth,last)的。
简单测试代码如下
要注意的是,此函数只是将第nth大的元素排好了位置,但并没有返回值
所以要知道第nth大的元素 还得进行一步,cout<<iarray[nth]<<endl; nth既那个位子
[cpp] view
plain copy
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int iarray[]={5,6,15,89,7,2,1,3,52,63,12,64,47};
int len=sizeof(iarray)/sizeof(int);
int i;
for(i=0;i<len;i++)
cout<<iarray[i]<<" ";
nth_element(iarray,iarray+6,iarray+len); //排序第6个元素
cout<<endl;
for(i=0;i<len;i++)
cout<<iarray[i]<<" ";
cout<<" 第6-th个元素 "<<iarray[6]<<endl;
}
头文件: <algorithm>
函数名: std::nth_element
对给定范围[first,last)内的元素进行重新布置.方法是,nth位置的元素放置的值就是把所有元素排序后在nth位置的值.把所有不大于nth的值放到nth的前面,把所有不小于nth的值放到nth后面.对给定范围内的元素"排序"
参数
first, last随机访问迭代器.指定了需要重新"排序"的范围.包括first,但不包括last.
nth
随机访问迭代器.指向范围[first,last)内的一个位置.这个位置将放置排序后应该放于此位置的元素.
comp
二元函数. 返回bool. 表明是否第一个参数应该排序到第二个参数的前面.此函数不应该修改参数值.可以是一个函数指针或函数对象.
返回值
无简单的说nth_element算法仅排序第nth个元素(从0开始的索引)
如iarray [first,last) 元素区间
排序后 iarray[nth] 就是第nth大的元素(从0开始)
要注意的是[first,nth) [nth,last)内 的大小循序还不一定
只能确定iarray[nth]是第nth大的元素。
当然 [first,nth) 肯定是不大于 [nth,last)的。
简单测试代码如下
要注意的是,此函数只是将第nth大的元素排好了位置,但并没有返回值
所以要知道第nth大的元素 还得进行一步,cout<<iarray[nth]<<endl; nth既那个位子
[cpp] view
plain copy
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int iarray[]={5,6,15,89,7,2,1,3,52,63,12,64,47};
int len=sizeof(iarray)/sizeof(int);
int i;
for(i=0;i<len;i++)
cout<<iarray[i]<<" ";
nth_element(iarray,iarray+6,iarray+len); //排序第6个元素
cout<<endl;
for(i=0;i<len;i++)
cout<<iarray[i]<<" ";
cout<<" 第6-th个元素 "<<iarray[6]<<endl;
}
相关文章推荐
- C++中的const函数与const_cast的矛盾
- PAT (Basic Level) Practise (中文)1050. 螺旋矩阵(25)
- CRC32校验算法C语言版(查表法)
- stdint--ISO C99: 7.18 Integer typesC语言扩展类型
- C语言的数据类型转换
- JS下打印三角形(其实和C语言一样的套路)
- 简化版的SHA1算法C语言版
- c语言:图的邻接矩阵的建立与广度优先搜索实现
- Template Method模式理解
- opencl:c++接口(cl.hpp)利用cl::LocalSpaceArg设置__local 参数
- 详解一道C++笔试题,考察重载、覆盖、多态
- C++利用链栈实现表达式求值
- c语言libcurl库的异步用法
- c++ 单例模式下的实例自动销毁(单例自动回收器)
- C++回收回收
- C语言中关键字const、static、volatile的用法分析
- C++对象的内存分布和虚函数表
- R - Milking Time——POJ C语言实现
- 用type定义的枚举类型和结构体
- 一些C++经典书籍