2016-11-08 36 views
0

我需要在不使用數組/列表列表的情況下對文件中的整數進行排序。該文件必須使用RandomAccessFile讀取。除了使用數組列表之外,我想不出任何解決這個問題的方法。我被允許使用一些變量。另外,我如何交換文件中的兩個數字?在不使用集合的情況下對文件中的整數進行排序java

import java.io.*; 

class Sort 
{ 
    public static void main(String[] args) 
    { 
     try { 
      RandomAccessFile abc = new RandomAccessFile(args[0], "rw"); 
      long n = abc.length(); 
      System.out.println(n); 
      long i = 0; 
      while (i <= n) { 
       System.out.println("Coming Here"); 
       int c = Integer.parseInt(abc.readUTF()); 
       System.out.println(c); 
       i = i + 1; 
      } 
     } catch (IOException e) { 
      System.out.println(e); 
     } 
    } 
} 
+0

你試過了什麼?你檢查過文件嗎? https://docs.oracle.com/javase/8/docs/api/java/io/RandomAccessFile.html –

+0

A ['RandomAccessFile'](https://docs.oracle.com/javase/8/docs/api /java/io/RandomAccessFile.html)基本上是磁盤上的一個數組,所以就這樣對待它。 –

+0

@AdrianK。我一直讀到文件中的整數並寫回來。我無法弄清楚如何在不使用其他數據結構的情況下對數字進行排序。文檔並沒有真正的幫助。 –

回答

0

首先,由於文本編號表示的長度不同,文件中的文本中的整數將會很困難。

  • 首先應該檢查數據是否是二進制數據。

因此,我假設包含int的二進制數據存儲在文件中。 一個java int佔用4個字節,所以每個文件位置將是四倍。所以你可以使用數組。如果是全部數組,Arrays.sort將解決它。否則幾個數組和合併排序算法將是可行的。

你可以做快速排序或使用合併排序隨機訪問文件住:

fh.seek(i1*4L); 
int n1 = fh.readInt(); 
// If ints are not stored in big endian byte order: 
// int n1littleEndian = Integer.reverse(n1); 

在生產環境中,人會得到相關的信道,並使用內存映射的字節緩衝區;加快速度。

+0

我想對文件本身內的整數進行排序,而不使用數組 –

+0

使用seek,readInt和writeInt。 –

相關問題