码迷,mamicode.com
首页 > 其他好文 > 详细

一百万个数求前一百个

时间:2016-05-20 14:41:45      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:include

在内存有限的情况下,求出一百万个数的前一百个。

解题思路:首先想到的是将一百万个数分成一百份,一份就是一万个,然后以一万建一个最小堆求出前一百个,一百份又是一万个这样就能求出前一百个;

代码如下:


#include<windows.h>

#include<vector>

#include<ctime>

#include<cstdlib>

#include<iostream>

using namespace std;


const int N=10000;

const int K=100;


void CreateArray(vector<int>&array)

{

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 <size && a[child + 1] < a[child])

{

++child;

}

if (a[child] < a[root])

{

swap(a[child], a[root]);

root = child;

child = 2 * root + 1;

}

else

{

break;

}

}

}


void Gettop(vector<int>&array)

{

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]<array[j])

{

a[0] = array[j];

AdjustDown(a, K, 0);

}

}

for (size_t i = 0; i < K; i++)

{

cout << a[i] << " ";

}

cout << endl;

}

void Test()

{

vector<int>array;

CreateArray(array);

Gettop(array);


}


本文出自 “溪风” 博客,请务必保留此出处http://xiexiankun.blog.51cto.com/10785425/1775367

一百万个数求前一百个

标签:include

原文地址:http://xiexiankun.blog.51cto.com/10785425/1775367

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!