1亿个数选前100最大数

算法思想

1.选择一亿数的前100数前100个数排序

2.后面的数字通过插入排序

#include<iostream>
using namespace std;
void buddlesort(int array[],int n)
{
    bool exchange=true;
    int count=n;
	while(exchange){

		exchange=false;
		for(int i=0;i<count;i++)
		{
			if(array[i]>array[i+1])
			{
				int temp=array[i];
				array[i]=array[i+1];
				array[i+1]=temp;
				exchange=true;

			}
		}
        count--;
        if(count<n-100)
        {
        	break;
        }
	}
}
void insertsort(int array[], int n)
{

	buddlesort(array,100);

	for(int i=100;i<n;i++)
	{
		int temp=array[i];
		int pos=100;
		for(int j=100;j>0;j--)
		{
			if(temp<array[j])
			{
				pos=j;
				break;
			}
		}

		for(int k=0;k<pos-1;k++)
		{
		   array[k]=array[k+1];
		}
		array[pos-1]=temp;

	}
}

int main()
{
	int *array=new int[100000000];
	for(int i=0;i<100000000;i++)
	{
		array[i]=100000000-i;
	}

	 insertsort(array, 100000000);
	 for(int i=0;i<100;i++)
	 {
 		cout<<array[i]<<endl;
     }
     delete array;

}

  

时间: 2024-10-18 07:59:57

1亿个数选前100最大数的相关文章

100亿个数取前1w名

#include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/time.h> static unsigned int BUF_PAGES; /* 缓冲区有多少个page */ static unsigned int PAGE_SIZE; /* page的大小 */ stati

揭秘过亿App的前100万用户怎么来的

http://www.rayfile.com/files/3aeb70f8-523f-11e4-a6b1-0015c55db73d/ http://www.rayfile.com/files/3fb53ad4-523f-11e4-91c4-0015c55db73d/ http://www.rayfile.com/files/410fc068-523f-11e4-a077-0015c55db73d/ http://www.rayfile.com/files/405c35d4-523f-11e4-b

获取一亿数据获取前100个最大值

package cn.usst.tophundred.quicksort; import java.util.Random; /** 获取一亿数据获取前100个最大值 1. 假设数组为 array[N] (N = 1 亿),首先利用quicksort的原理把array分成两个部分,左边部分比 array[N - 1] (array中的最后一个值,即pivot) 大, 右边部分比pivot 小.然后,可以得到 array[array.length - 1] (即 pivot) 在整个数组中的位置,

面试题-10亿个数中找出最大的10000个数(top K问题)

一个较好的方法:先拿出10000个建立小根堆,对于剩下的元素,如果大于堆顶元素的值,删除堆顶元素,再进行插入操作,否则直接跳过,这样知道所有元素遍历完,堆中的10000个就是最大的10000个.时间复杂度: m + (n-1)logm = O(nlogm) 优化的方法:可以把所有10亿个数据分组存放,比如分别放在1000个文件中(如果是字符串hash(x)%M).对每个文件,建立大小为10000的小根堆,然后按有序数组的合并合并起来,取出最大的10000个即是答案. top K问题 在大规模数据

汇编语言-判断素数:找出前100以内的素数

1. 题目:找出前100以内素数. 2. 要求:将前100以内素数找出并显示值,要求每行显示5个素数. 先列出求100以内素数的C++代码 然后根据C++代码写汇编代码,相对来说比较容易. 1 //The program is to find the primes from 1 to 100 with C++ 2 //By Karllen 3 //time: 05/19/2014 4 5 #include <iostream> 6 int main(void) 7 { 8 9 int numb

[信息学]省选前模板整理

省选前把板子整理一遍,如果发现有脑抽写错的情况,欢迎各位神犇打脸 :) 数学知识 数论: //组合数 //C(n,m) 在n个数中选m个的方案数 ll C[N][N]; void get_C(int n) { for(int i=1;i<=n;i++) { C[i][i]=C[i][0]=1; for(int j=1;j<i;j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod; } } //欧几里得算法 //(a,b) ll gcd(ll a,ll b) { re

一百万个数求前一百个

在内存有限的情况下,求出一百万个数的前一百个. 解题思路:首先想到的是将一百万个数分成一百份,一份就是一万个,然后以一万建一个最小堆求出前一百个,一百份又是一万个这样就能求出前一百个: 代码如下: #include<windows.h> #include<vector> #include<ctime> #include<cstdlib> #include<iostream> using namespace std; const int N=100

利用最小堆找出10亿个数中最大的10000个数

最小堆 最小堆是一种完全二叉树,特点是根节点比两个子节点都小(或者根节点比子节点都大) 过程 先找10000个数构建最小堆 依次遍历10亿个数,如果比最小堆的最小值大,则替换这个最小值,并重新构建最小堆 最后输入10000个值 时间复杂度 构建最小堆的复杂度为 logn,求出最大m个数会构建m次最小堆,时间复杂度为 m logm, 这里m为10000 进行n次时间复杂度为n,这里n为10亿,总时间复杂度为 n m logm,即10亿 10000 log 10000 其他算法 将十亿个数排序,找出

GitHub 中国区前 100 名到底是什么样的人?

本文根据Github公开API,抓取了地址显示China的用户,根据粉丝关注做了一个排名,分析前一百名的用户属性,剖析这些活跃在技术社区的牛人到底是何许人也!后续会根据我的一些经验出品<技术人员如何建立自己的个人品牌><优雅的程序员列传>欢迎加我微信diycodes交流. Github中国区前一百名城市分布,令人比较意外的是IT重镇深圳和广州居然和北上杭差距那么大!(其中China表示没有注明具体城市用户) Github中国区前一百名语言分布图,前端开发者依然霸占着大多数,移动开发