C++ 实现随机数组降序排序后前 30% 最小值
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;
}
思路解析:
-
首先,利用
srand函数初始化随机种子,然后利用rand函数生成随机数,得到随机数组的长度n和元素a[i]。 -
然后,利用 STL 的
nth_element函数进行降序排序,其中第 3 个参数是数组末尾的迭代器,即a + n,因为我们需要对整个数组进行排序;第 2 个参数是要求第k大的元素,即前 30% 中的最后一个元素,因为我们要求的是前 30% 中最小的数;第 4 个参数是比较函数greater<int>(),表示采用降序排列。 -
最后,取出第
k - 1个元素,即前 30% 中最小的数,并输出。
原文地址: https://www.cveoy.top/t/topic/ouMv 著作权归作者所有。请勿转载和采集!