C++ 实现随机数组降序排序后前 30% 最小值

本文将介绍使用 C++ 语言实现随机数组降序排序后,求前 30% 元素中最小值的方法。

AC 代码如下:

#include <iostream>
#include <algorithm>
#include <ctime>
using namespace std;

const int N = 100000;

int a[N];

int main()
{
    srand(time(NULL)); // 初始化随机种子
    int n = rand() % N + 1; // 随机生成数组长度
    for (int i = 0; i < n; i++)
        a[i] = rand(); // 随机生成数组元素

    int k = n * 0.3; // 前 30% 的元素个数
    nth_element(a, a + k, a + n, greater<int>()); // 利用 STL 的 nth_element 函数进行降序排序

    int ans = a[k - 1]; // 前 30% 中最小的数
    cout << ans << endl;

    return 0;
}

思路解析:

  1. 首先,利用 srand 函数初始化随机种子,然后利用 rand 函数生成随机数,得到随机数组的长度 n 和元素 a[i]

  2. 然后,利用 STL 的 nth_element 函数进行降序排序,其中第 3 个参数是数组末尾的迭代器,即 a + n,因为我们需要对整个数组进行排序;第 2 个参数是要求第 k 大的元素,即前 30% 中的最后一个元素,因为我们要求的是前 30% 中最小的数;第 4 个参数是比较函数 greater<int>(),表示采用降序排列。

  3. 最后,取出第 k - 1 个元素,即前 30% 中最小的数,并输出。

C++ 实现随机数组降序排序后前 30% 最小值

原文地址: https://www.cveoy.top/t/topic/ouMv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录