nth_element 算法注解.pdf

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
nth_element 算法注解

nth_element nth_element nntthh__eelleemmeenntt 算法注解 nth_element 是STL 提供的一个算法,用于找出序列中 的第n大元素。这个算法涉及下面4个辅助函数: • _Nth_element • _Unguarded_partition • _Median • _Med3 下面是我对STL 源代码的注释。 /********************************************* ********************************************** * _Nth_element 使序列中第n大的元素位于第n个位子上,使用 比 较元素。 基本思想: (1) 找到一个包含n的足够小的区间[a,b),使得[a,b) 作为一个大粒度的元素处于序列的有序位置。 (2) 对[a,b)部分进行排序。 nth_element 查找区间的方式体现了二分(折半)查找 的思想。它的核心是 ungarded_partition 算法, ungarded_partition 算法能够找出随机序列的近似的位 置中间值。 ********************************************** ********************************************** */ templateclass _RanItinline void _Nth_element(_RanIt _First, _RanIt _Nth, _RanIt _Last) { //orderNthelement,usingoperator _DEBUG_RANGE(_First, _Last); /* 逐步缩小[_First, _Last)的区间,直至尺寸小到可 以直接对局部进行排序。 _ISORT_MAX 是一个阀值,在algorithm中被定 义为32,表示适于插入法排序的序列的最大长度。*/ for(; _ISORT_MAX _Last-_First; ) { // divide andconquer,orderingpartition containing Nth /* 把序列的当前部分划分为有序的三份。*/ pair_RanIt,_RanIt_Mid = _Unguarded_partition(_First, _Last); /* 确定下一步有哪些信誉好的足球投注网站区间。*/ if (_Mid.second=_Nth) _First = _Mid.second; else if (_Mid.first =_Nth) return; //Nthinside fatpivot,done else _Last= _Mid.first; } /* 对[_First, _Last)排序,第n大元素就到了第n个 位置上。*/ _Insertion_sort(_First, _Last); // sort anyremainder } /********************************************* ********************************************** * _Unguarded_partition 把序列划分为有序的三份:[_First, Mid.First), [Mid.First, Mid.Second), [Mid.Second, _Last),其中 [Mid.First, Mid.Second)内的元素相等。 注意,不是等分: (1) 不保证[Mid.First, Mid.Second)在位置上处于序列 的中间。 (2) 不保证[Mid.First, Mid.Second)在元素值上处于序 列的中间。 (3)[_First, Mid.First)和[Mid.Second, _Last)的长度有可 能为0。 (4) [_First, Mid.First)中的所有元素(若有)小于 [Mid.First, Mid.Second)中的任一元素。[Mid.Second, _Last)中的则大于。 ********************************************** *****

文档评论(0)

牛X文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档