c语言,如何对大量数据(一百万条)排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言,如何对大量数据(一百万条)排序相关的知识,希望对你有一定的参考价值。
你好,再请教你个问题,想把文件里一百万条数据(1列)读出来放到数组中排序,应该怎么做才能效率不会太差?
现在试下来,数组的长度定义是有限的,1万还能运行通过,太大的话编译就不通过。
且将1万条数据排序的效率也很低,要5秒多。。。
最好能给示例代码参考。
非常感谢!
如何从一百万条数据记录中快速获取最近的 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 名其他人。
【问题讨论】:
latitude
和 longitude
是如何存储的?
你搜索过空间数据类型吗?参见例如***.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语言,如何对大量数据(一百万条)排序的主要内容,如果未能解决你的问题,请参考以下文章
QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)