100万个数据,数据值在0~65535之间,请用尽可能少的内存和最快的速度从小到大排序

场景说明:100万个数据,数据值在0~65535之间,请用尽可能少的内存和最快的速度从小到大排序

voidsort(int* array, int n)

{

//n的值在100万左右

//你的实现

}

我们首先观察到所有的数据已经保存到了array数组中,现在我们需要做的就是将数组中的元素排序。现在我们把数组中的元素提取出来比如是3,然后我们提取出数组下标是3的元素,保存到临时空间,通过负数来计算个数:

void sort(int* array, int n)
{
    int tmp=0;
    for(int i=0;i<n;i++)
    {
        //如果遍历到当前是一个负数,表示是一个计数值(而不是一个排序值),遍历下一个
        if(array[i]<0)
        {
            continue;
        }

        //遍历到的数值,作为下标的位置,取值是一个负数,表示这是一个计数值,--增加计数值,遍历下一个
        if(array[array[i]]<0)
        {
            array[array[i]]--;
            continue;
        }

        //回溯到上一个值,重新开始匹配
        tmp=array[array[i]];
        array[array[i]]=-1;
        array[i]=tmp;
        i--;
    }
}


时间: 2024-10-10 21:48:32

100万个数据,数据值在0~65535之间,请用尽可能少的内存和最快的速度从小到大排序的相关文章

关于批量插入数据之我见(100万级别的数据,mysql)

因前段时间去面试,问到如何高效向数据库插入10万条记录,之前没处理过类似问题,也没看过相关资料,结果没答上来,今天就查了些资料,总结出三种方法: 测试数据库为mysql!!! 方法一: public static void insert() { // 开时时间 Long begin = new Date().getTime(); // sql前缀 String prefix = "INSERT INTO tb_big_data (count, create_time, random) VALUE

年薪50万的大数据分析师养成记【摘抄】

以下是一位在数据分析领域打滚了N年后,写下的一些体会,一定能给新人一些借鉴的地方.(总结的不错,大家可以借鉴学习哦) 一.数据分析师有哪些要求? 1.理论要求及对数字的敏感性,包括统计知识.市场研究.模型原理等. 2.工具使用,包括挖掘工具.数据库.常用办公软件(excel.PPT.word.脑图)等. 3.业务理解能力和对商业的敏感性.对商业及产品要有深刻的理解,因为数据分析的出发点就是要解决商业的问题,只有理解了商业问题,才能转换成数据分析的问题,从而满足部门的要求. 4.汇报和图表展现能力

php的内置函数array_values()重置数组信息,数组K值有0开始重新排列

<?php /*php的内置函数array_values()重置数组信息,数据K值有0开始重新排列*/ $a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse"); print_r(array_values($a)); // 输出: // Array ( [0] => Cat [1] => Dog [2] => Ho

mysql8.0如何快速生成100万数据人员信息数据

在爱学习mysql优化时 我需要大量数据才检测sql语句的效率 下面给大家模拟一个生成100万人员信息的数据的范例 创建一个数据库  名为test 建立表 create table t(id bigint not null auto_increment primary key, mobile bigint, password varchar(64), username varchar(64), sex tinyint not null default 1, birthday datetime,

给你100万条数据的一张表,你将如何查询优化?

1.两种查询引擎查询速度(myIsam 引擎 ) InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行. MyISAM只要简单的读出保存好的行数即可. 注意的是,当count(*)语句包含 where条件时,两种表的操作有些不同,InnoDB类型的表用count(*)或者count(主键),加上where col 条件.其中col列是表的主键之外的其他具有唯一约束索引的列.这样查询时速度会很快.就是可

好消息!王家林老师免费为全社会培养100万名优秀的大数据从业人员!

大数据是用scala语言,和java有些不同又比java强大,省去了很多繁琐的东西,scala中的的接口用trait来定义,不同于java的接口,trait中可以有抽象方法也可以有不抽象方法.scala中的方法中还可以定义方法,这在java中是从来没有的. 十三五规划提出,实施国家大数据战略,推进数据资源开放共享.这标志着大数据已被国家政府纳入创新战略层面,成为国家战略计划的核心任务之一.在2015年9月,国务院发布<促进大数据发展行动纲要>,旨在大力促进中国数据技术的发展,数据将被作为战略性

批量插入100万条数据

创建数据库: --Create DataBase create database BulkTestDB; go use BulkTestDB; go --Create Table Create table BulkTestTable( Id int primary key, UserName nvarchar(32), Pwd varchar(16)) go --Create Table Valued CREATE TYPE BulkUdt AS TABLE (Id int, UserName

极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒

链接地址:http://www.cnblogs.com/armyfai/p/4646213.html 要:在这里我们将看到的是C#中利用ODP实现在Oracle数据库中瞬间导入百万级数据,这对快速批量导入的实现有重要意义. .Net程序中可以通过ODP调用特性,对Oracle数据库进行操作,今天来讲一下数据批量插入的功能,所用技术不高不深,相信很多朋友都接触过,小弟班门弄斧了,呵呵.这篇文章是上篇文章的续集,因为上一次试验的征集结果没有突破4秒的方法,所以这次继续挑战与挖掘新方法,虽然是Orac

极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方法所耗费的时间. 本实验中所用到工具为VS2008和SQL SERVER 2000.SQL SERVER 2008,分别使用5中方法将100万条数据导入SQL 2000与SQL 2008中,实验环境是DELL 2850双2.0GCPU,2G内存的服务器.感兴趣的朋友可以下载源代码自己验证一下所用时间