C++ nth_element

题目:https://www.luogu.com.cn/problem/P1923

  • 第一个想法:根据快排思想来寻找第 k小的数。

快排的核心思想是二分。

在原二分的基础上可以进行修改:因为每次递归都会将数组划分为三部分,而答案只会在这三部分中的一个,不需要再对其他部分进行搜索,从而达到优化时间复杂度的效果。

#include 
#include 
#include 
#include 
#include 
using namespace std;
int x[5000005],k;
void qsort(int l,int r)
{
    int i=l,j=r,mid=x[(l+r)/2];
    do
    {
        while(x[j]>mid)
            j--;
        while(x[i]
  • 思路二:
    在强大的STL库中存在一个神奇的函数,那就是nth_element,这个函数主要用来将数组元素中第k小的整数排出来并在数组中就位,随时调用,可谓十分实用。

函数语句:nth_element(数组名,数组名+第k小元素,数组名+元素个数)

int main(){
    
    int n,c;
    
    scanf("%d%d",&n,&c);
    
    for (int i = 0; i

你可能感兴趣的:(C++ nth_element)