0

ビットごとの演算子 (>>、<<、&、|) を使用して値から個々のビットを取得する基数ソートを行うメソッドを作成する必要があります。

ファイルは次のようになります。

0100
1
0011
110
0010
101
0001
11
0000

現在、ファイルを読み込んでいます(サイズは不明です)。最初は整数として読み込んでいましたが、先頭のゼロを切り捨てていることに気付きました。そのため、それらを String[] に格納しました。

public static void readFile(String fileName) throws FileNotFoundException, IOException
{
    File file = new File(fileName);

    byte[] bytes = new byte[(int) file.length()];
    try (FileInputStream fis = new FileInputStream(file))
    {
        fis.read(bytes);
    }

    String[] value = new String(bytes).split("\\s+");
    numbers = new String[value.length];
    System.arraycopy(value, 0, numbers, 0, value.length);

} // end of import file

それが、機能しているそのファイルをインポートする私の現在の方法です。ビット単位の操作に関してどこから始めればよいかわからない基数ソートを除いて、他のすべての方法が機能しています。

ソートがどのように機能するかという概念はありますが、実装するのは少し難しいようです。

よろしく、

マイク

4

1 に答える 1

0

配列を3つの新しいものに分割する再帰的なソートを使用します。次の桁= 0の配列、次の桁= 1の配列、次の桁のない配列です。したがって、数値は次のようにソートされます。

Input
0100
1
0011
110
0010
101
0001
11
0000

Step 1
 Array "no next" (empty)
 Array "next = 0"
 0100
 0011
 0010
 0001
 0000
 Array "next = 1"
 1
 110
 101
 11

Step 2 (only showing the array "next = 1")
 Array "no next"
  1
 Array "next = 0"
  101
 Array "next = 1"
  110
  11

サイズの配列が 0 または 1 になるまで続けて、配列がソートされていることを確認します。次に、クイックソートのようにソートされた配列を返します

于 2013-10-15T04:09:01.720 に答える