当前位置:编程学习 > C#/ASP.NET >>

文本快速排序

文件y中的数据格式为:
A段|B段|

数据量:
2000000

要求:
1、将文件中的数据以A段为排序字段进行排序,并输出到文件A,形如:
4600xx001|138xx001
4600xx002|138xx001
4600xx003|138xx001

2、将文件中的数据以B段为排序字段进行排序,并输出到文件B,形如:
4600xx001|138xx001
4600xx001|138xx002
4600xx001|138xx003

3、需计算两次排序处理所需要的时间(如数据装载时间、排序时间)不能放进数据库排序,以毫秒为单位

--------------------编程问答-------------------- mark --------------------编程问答-------------------- 2000000字节?2000000条记录?多少时间内算是过关? --------------------编程问答-------------------- 每行都是固定长度?还是会变
4600xx001 138xx001
41231xx123411 11xx38xx2011 --------------------编程问答-------------------- A段 和B段 有没有最大位数啊 --------------------编程问答--------------------
定义一个结构,里面就A和B两个字段

用List<T>存放读出来的内容

调用它的Sort方法排序就可以了

--------------------编程问答-------------------- 2000000 
的数据量,如果都读到内存操作,抛开读取文件速度的因素也会占用很多内存,况且要按A段和B段分别排序,然后写入文件这样的效率不实际测下不知道会怎么样,但建议将该文件以逗号文件的形式读入数据库,然后在数据库内排序直接写入到文件,我觉的会比你直接读到内存中好些,只是路过!!! --------------------编程问答-------------------- mark,考虑文件级别的Merge Sort --------------------编程问答-------------------- gz --------------------编程问答-------------------- 大概算了一下...60M左右的东西...
写个基数排序吧... --------------------编程问答-------------------- 不知道数据分布是怎么样,如果数据分布比较均匀
分部排序到文件,再排,使用表排序和二叉相结合,应该很快的,
至于时间机器不同,时间不同,不好算啊 --------------------编程问答-------------------- 仔细看了LZ的数据
4600xx001 ¦138xx001
如果可变化位就是XX那 这2000000中应该有很多的重复项...
真的只是XX的话..就使用桶排序..不过准备100个桶..不算预处理,排序时间绝对在毫秒级..
因为时间复杂度不过是O(n)....具体情况请LZ说明..
--------------------编程问答-------------------- 楼主貌似失踪了 --------------------编程问答-------------------- 这问题 楼主 怎么都不来说清楚点呢

新手顶上 学习 --------------------编程问答-------------------- 同意12楼 --------------------编程问答-------------------- 不好意识最近几天没有上来,
文件至少有60m,数据分布都是均匀的,每条记录的长度都是一样
现在问题如果放进内存读取然后排序,肯定会内存不足,也不能放进数据库,
我现在还没想到好的方法 --------------------编程问答-------------------- 如果是只是执行一次,全装到内存没有问题,前提计算机内存应该自少1G,不过现在这样的计算机应该很普遍吧..
还有是4600xx001 ¦138xx003 
XX在变化吗? --------------------编程问答-------------------- 4600xx001¦138xx003XX
变化的,
460012001|13822003001
460010002|13822103002
就是这样,但还要排序,还有一个问题要考虑,如果数据量比2000000还要大怎么办
4000000数据量又怎办? --------------------编程问答-------------------- 恩,你的硬盘足够快也行...
按文件的方式实现桶排序...这样没有内存问题也不用考虑数据量的问题..
举例A 假设后4位是变化的
程序顺序是这样的..
在一个目录中创建10000个文件,编号0-9999,软件以文件流的方式打开这10000个文件把这些流以数组集合的方式集成 例:Stream flies=new Stream[10000]
以文件流的方式打开源文件
whlie(不到文件结束)
{
读取一行;
获得A的最后4位:例如99
获得99号流:例如Stream temp =flies[99];
将这一行写入获得的流:例如temp
}
连接 Stream[10000];
排序完成
...哈哈我都忍不住想亲自试试了...
看看可以吗?


--------------------编程问答-------------------- 这样玩...硬盘怕坏的会很快的... --------------------编程问答-------------------- 路过,学习 --------------------编程问答-------------------- 通过建立索引,对索引进行排序,最后根据索引重新输出个文件 
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,