十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在内存有限的情况下,求出一百万个数的前一百个。
解题思路:首先想到的是将一百万个数分成一百份,一份就是一万个,然后以一万建一个最小堆求出前一百个,一百份又是一万个这样就能求出前一百个;
代码如下:
#include
#include
#include
#include
#include
using namespace std;
const int N=10000;
const int K=100;
void CreateArray(vector
{
srand(time(0));
array.reserve(N);
for (size_t i = 0; i < N; i++)
{
array.push_back(rand() % 10000);
}
for (size_t j = N-K; j < N; j++)
{
array[j] = rand()%N;
}
}
void AdjustDown(int* a, size_t size, int root)
{
int child = root * 2 + 1;
while (child < size)
{
if (child + 1
{
++child;
}
if (a[child] < a[root])
{
swap(a[child], a[root]);
root = child;
child = 2 * root + 1;
}
else
{
break;
}
}
}
void Gettop(vector
{
int a[K] = {};
for (size_t i = 0; i < K; i++)
{
a[i] = array[i];
}
for (int i = (K - 2) / 2; i >= 0; i--)
{
AdjustDown(a, K, i);
}
for (int j = K; j < N; j++)
{
if (a[0]
{
a[0] = array[j];
AdjustDown(a, K, 0);
}
}
for (size_t i = 0; i < K; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
void Test()
{
vector
CreateArray(array);
Gettop(array);
}
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。