有10万个随机数,从这些随机数中找到前一百个最大的数(不能排列)还要找到前一百个最大的合数

随机生成10万个整数,在不对10万整数排序的情况下,如何获得最大的前100个数、如何获得最大的前100个合数,
数过多,不能用遍历数组来动吧,太麻烦了,有什么比较好的方法吗

我有一个想法,就是维护一个长度为100的有序数组。每次插入都用二分查找来找位置。这样的话应该能优化一下。然后合数也类似 。不过这就是时间换空间了。

排序也不慢,主要还是cout的效率太低

#include<iostream>
#include<ctime>
#include<cstdlib>
#include<algorithm>
using namespace std;
#define N 100000
int a[N];
int main(){
    for(int i=0;i<N;i++){
        a[i]=rand()%N+1;
    }
    sort(a,a+N,greater<int>());
//    for(int i=0;i<N;i++){
//        cout<<a[i]<<" "; 
//    }
    return 0;
}