要对10亿个整数进行排序,整数是正整数、有可能是重复的。因为数据太多不可能一次性从文件中读入数据到内存进行排序,目前我只想到把数据写到数据库进行排序,没有想到其他的排序方法,请教各位有没有办法,我现在觉得无从下手。内存大数据排序

解决方案 »

  1.   

    http://www.cnblogs.com/lqminn/archive/2012/08/30/2663281.html
      

  2.   

    写入数据库,查询排序select * from A order by num
      

  3.   

    在读文件的时候发现一个问题,
    java.io.EOFException
    at java.io.DataInputStream.readInt(DataInputStream.java:375)
    at t1.SortFile.readFlie(SortFile.java:22)
    at t1.SortFile.main(SortFile.java:43),导致数据丢失 下面是代码                FileInputStream fr=new FileInputStream("D:/data.txt");
    BufferedInputStream bufr=new BufferedInputStream(fr);
    DataInputStream dbuf=new DataInputStream(bufr);
    int i=0;
    while((i=dbuf.readInt())!=-1){
    i=dbuf.readInt();
    System.out.println(i);我不知道这是何种原因导致,读取的时候发生异常,求各位解答
      

  4.   

    笨猫参考#1的方法,如果lz能给jvm分配3G内存的,那么:byte[] bys = new byte[Integer.MAX_VALUE];
    初始时,每个byte的值是0,有一个值就加一个,如:
    10031
    10132
    10031
    10031就是
    bys[10031]=3
    bys[10132]=1每个值重复次数每个不能超过Byte.MAX_VALUE。
      

  5.   

    我自己写了一段代码应该是可以实现的 但是出现了上面说的异常,异常是因为读文件时产生的byte[] arrRead=new byte[1000000];
    int y;
    public void readFlie() {
    try{
    FileInputStream fr=new FileInputStream("D:/data.txt");
    BufferedInputStream bufr=new BufferedInputStream(fr);
    DataInputStream dbuf=new DataInputStream(bufr);
    int i=0;
    //把arrRead的每一个值初始化为0
    for(int q=0;q<arrRead.length;q++)
    arrRead[q]=0;
    //从文件中读取数据出现一次对应的值+1
    while((i=dbuf.readInt())!=-1){
    i=dbuf.readInt();
    if(arrRead[i]==0){
    arrRead[i]=1;
    }else{
    y= arrRead[i]++;}
    }
    dbuf.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    //输出数组对应到底下标,实现排序
    for(int j=0;j<arrRead.length;j++)
    if(arrRead[j]==1){
    System.out.println(j);
    }else{
    for(int z=0;z<y;z++)
    System.out.println(j);
    }
      

  6.   


    就基本的知识来说,没有百度不到或者google不到的问题,只是你找问题的方式可能有问题。
    把你的异常贴出来看看吧。
      

  7.   

    问题我已经发现了,是因为代码写重复了 while((i=dbuf.readInt())!=-1){    
                 i=dbuf.readInt(); 这里进行了两次读入。