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的源码)
整体来看用了类似快排的思想,其中有几点需要注意:
- pivot的选取方式:选择正在处理的序列的头尾中间三个元素的中间值
- nth位于pivot左边时,就继续向左边搜索,位于pivot右边时就往右边搜索
- 当待处理序列只有三个元素时,直接选择排序

浙公网安备 33010602011771号