C++ nth-element()相关

本来想把这个函数的思想弄明白,结果花了很多时间还是没有摸透。

作用

找到数组中第k大或者第k小的数字,将其归位。默认找到的是第k大(即按升序排列,第k个数),也可以自己写比较函数,与sort类似

参数及意义

第一种
//排序规则采用默认的升序排序
void nth_element (RandomAccessIterator first,
                  RandomAccessIterator nth,
                  RandomAccessIterator last);
//first与sort一样,表示这个序列的第一个迭代器,last也一样
//nth表示要找的第几个元素,同样是迭代器
第二种
//排序规则为自定义的 comp 排序规则
void nth_element (RandomAccessIterator first,
                  RandomAccessIterator nth,
                  RandomAccessIterator last,
                  Compare comp);
//其中comp写法也和快排的比较函数一样

思想(具体还是得读STL的源码)

整体来看用了类似快排的思想,其中有几点需要注意:

  1. pivot的选取方式:选择正在处理的序列的头尾中间三个元素的中间值
  2. nth位于pivot左边时,就继续向左边搜索,位于pivot右边时就往右边搜索
  3. 当待处理序列只有三个元素时,直接选择排序

参考:

STL源码分析
C语言中文网

posted @ 2022-01-08 18:07  releek  阅读(39)  评论(0)    收藏  举报