c语言,如何对大量数据(一百万条)排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言,如何对大量数据(一百万条)排序相关的知识,希望对你有一定的参考价值。

你好,再请教你个问题,想把文件里一百万条数据(1列)读出来放到数组中排序,应该怎么做才能效率不会太差?
现在试下来,数组的长度定义是有限的,1万还能运行通过,太大的话编译就不通过。
且将1万条数据排序的效率也很低,要5秒多。。。
最好能给示例代码参考。
非常感谢!

参考技术A 用malloc函数在堆空间中分配连续空间存储就好啊,栈的大小有限。直接数组确实太大会出问题。

如何从一百万条数据记录中快速获取最近的 100 个点?

【中文标题】如何从一百万条数据记录中快速获取最近的 100 个点?【英文标题】:how to get the nearest 100 points from one million data records quickly? 【发布时间】:2014-10-18 03:17:18 【问题描述】:

给定一个点A,从一百万条数据记录中获取最近的100个点

数据库是MySql 一百万条经纬度记录 这些点表示用户登录时的当前位置,因此它们可能会发生变化。

场景:

当用户打开页面时,显示最近的前 100 名其他人。

【问题讨论】:

latitudelongitude 是如何存储的? 你搜索过空间数据类型吗?参见例如***.com/questions/2096385/… @Barranka 例如,lng 38.619752 lat 59.765115 你是在使用 mysql extensions for spatial data 还是只是将它们存储在一个普通的表中? 如果数据发生变化,您真的需要 100 个最接近点还是只需要 100 个接近点?也就是说,如果 600 米内有 200 人,你返回哪 100 人真的很重要吗?如果在 600m 内有 50 人,在 600m 和 1200m 之间有另外 60 人,你返回 60 人中的哪 50 人真的很重要吗?使用是社会性的,还是生死攸关的? 【参考方案1】:
    为您的数据库设置空间扩展,如果您还没有这样做的话。 将 1M 个位置的纬度/经度存储在数据库的地理类型列中。 在该列上创建空间索引。 根据兴趣点与表中位置之间的距离,使用 WHERE 子句运行 SELECT 查询。查询将使用上述索引。

这是一个很好的article,关于在 MySQL 5.6 中使用空间扩展来处理这类事情。

【讨论】:

【参考方案2】:

http://en.wikipedia.org/wiki/Geohash 可能是加快平均情况的快速方法,但最坏情况下的行为仍然很糟糕。该文章建议您按 geohash 进行索引,并在查询中检索边界框中相当于 geohash 前缀的所有点。如果边界框很小,并且您发现其中的匹配点比边界框外的任何点都更近,那么您很快就成功了,但这些都可能不是真的。

【讨论】:

以上是关于c语言,如何对大量数据(一百万条)排序的主要内容,如果未能解决你的问题,请参考以下文章

高分求助:怎么处理百万条的excel数据

大表百万条以上记录非主键索引删除大量数据的操作方法

QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)

用于处理大量数据(100 万条记录及更多)的数据结构和技术

MYSQL 对 4000 万条记录表和 128GB 内存的专用服务器进行大量更新需要很长时间

如何使用Derwent Data Analyzer快速导入大量数据